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.
x
ma typ float
, x > 0.0
wymusza 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.37
nie jest float
, to jest double
. Więc jeśli chciałeś, float
to możliwe, że twój nauczyciel miał rację. W niektórych kontekstach (np. Przypisanie do liczby zmiennoprzecinkowej) 13.37
zostanie domyślnie przekonwertowane na float
żądany, aw innych kontekstach (np. Dedukcja typu szablonu) nie będzie, podczas gdy static const float
zawsze 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ę.