Czy istnieje różnica między 0 a 0.0 w C++? Którego powinieneś użyć do zainicjowania podwójnego?C++ różnica między 0 a 0.0
Dzięki
Czy istnieje różnica między 0 a 0.0 w C++? Którego powinieneś użyć do zainicjowania podwójnego?C++ różnica między 0 a 0.0
Dzięki
Dosłowne 0
jest uważany za int
dosłowny; literał 0.0
jest literałem o numerze double
. Przy przypisywaniu do double
albo zadziała (ponieważ int
może być rzutowany w rozszerzającej konwersji); jednak rzutowanie 0.0
na int
jest konwersją zawężającą i musi być wykonane jawnie; tj. (int)0.0
.
Jeden wydaje się być literałem całkowitym, a drugi literałem zmiennoprzecinkowym. To naprawdę nie ma znaczenia dla kompilatora, czy zainicjalizujesz floats czy double z literałami całkowitymi. W każdym razie literał zostanie wkomponowany w jakąś wewnętrzną reprezentację.
Proponuję sugerować 0.0, aby twoje zamiary (dla innych programistów) były jednoznacznie jasne.
Staram się zachować stałe ciągłe typu. 0 dla ints. 0.0f lub 0.f dla float, a 0.0 dla double.
Dla mnie najważniejszym powodem, aby to zrobić, jest to, że kompilator i programista widzą to samo.
Jeśli mogę to zrobić ...
float t=0.5f;
float r;
r= 1 * t;
... powinny być przypisane R 0 lub 0,5? Bez względu na to, czy zrobię to zamiast tego ...
float t=0.5f;
float r;
r= 1.0f * t;
i 0,0f to wartość zmiennoprzecinkowa. : D –
@Rob, czy mówisz, że podwójne nie może być niejawnie konwertowane na int? Rozważ "int a = 0.0;". –
Podwójne z pewnością można przypisać do int bez wyraźnej obsady. Ta część odpowiedzi musi zostać zmieniona. –