Kompilator nie dba o to, którego z nich używasz. Wyobraź sobie, że napisałeś to jako dwa konstruktory i skończyły one około 20 linii. Dalsze wyobrazić, że 19 linii były identyczne, a inna linia czytać
foo = 0;
w jednej wersji i
foo = optional;
w drugiej. W tej sytuacji użycie opcjonalnego parametru sprawia, że kod jest znacznie bardziej czytelny i zrozumiały. W innym języku, który nie miał parametrów opcjonalnych, zaimplementowałbyś to, gdyby wersja jednego parametru wywołała wersję z dwoma parametrami i przekazała mu jako drugi parametr zero.
Teraz wyobraź sobie inną parę konstruktorów lub funkcji, które znowu mają około 20 linii, ale są całkowicie różne. Na przykład drugi parametr to identyfikator, a jeśli jest podany, sprawdzasz zawartość w bazie danych, a jeśli nie, ustawiasz wartości na nullptr
, 0 i tak dalej. Można mieć wartość domyślną (-1 jest popularny do tego), ale potem organizm funkcji byłoby pełne
if (ID == -1)
{
foo = 0;
}
else
{
foo = DbLookup(ID);
}
które mogą być trudne do odczytania i może sprawić, że jedną funkcję o wiele dłużej niż dwa oddzielne funkcje. Widziałem funkcje z jednym gigantem if
, który rozdzielał całą całość na dwa osobne bloki bez wspólnego kodu, i widziałem ten sam stan badany 4 lub 5 razy w miarę postępu obliczeń. Oba są trudne do odczytania.
To jest rzecz o C++.Istnieje wiele sposobów na osiągnięcie większości rzeczy. Ale te różne sposoby służą innym celom, a kiedy "dostaniesz" subtelne różnice, napiszemy lepszy kod. W tym przypadku "lepszy" oznacza krótszy, szybszy (wszystkie te czasy wykonania) i bardziej ekspresyjny - ludzie czytający go mogą szybko zrozumieć twoje intencje.
Dwa spadki i brak komentarzy? –