Ostatnio natknąłem się na ten idiom programowania:
const float Zero = 0.0;
który jest następnie wykorzystywany w porównaniach:
if (x > Zero) {..}
Czy ktoś może wyjaśnić, czy jest to naprawdę bardziej wydajne, czytelne lub możliwe do utrzymania niż:
if (x > 0.0) {..}
UWAGA: Mogę wymyślić inne powody, by zdefiniować tę stałą. Zastanawiam się tylko nad jej użyciem w tym kontekście.
xma typ float, x > 0.0wymusza awans do double, który może być mniej wydajny. To nie jest dobry powód, aby korzystać nazwany stałą jednak tylko dla upewniając się swoimi stałymi mieć odpowiedni typ (np 0f, float(0)lub decltype(x)(0)).
13.37nie jest float, to jest double. Więc jeśli chciałeś, floatto możliwe, że twój nauczyciel miał rację. W niektórych kontekstach (np. Przypisanie do liczby zmiennoprzecinkowej) 13.37zostanie domyślnie przekonwertowane na floatżądany, aw innych kontekstach (np. Dedukcja typu szablonu) nie będzie, podczas gdy static const floatzawsze zaczyna się zgodnie z zamierzonym typem. Dlatego bardziej bezpieczny dla typu. Pamiętaj, że tak też będzie 13.37f! Istnieją jednak inne powody do unikania makra niż „bezpieczeństwo typu”, więc równie prawdopodobne jest, że korepetytor przedstawił ci kiepską argumentację.