2009-09-05 10 views

Odpowiedz

14

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.

+2

i 0,0f to wartość zmiennoprzecinkowa. : D –

+2

@Rob, czy mówisz, że podwójne nie może być niejawnie konwertowane na int? Rozważ "int a = 0.0;". –

+1

Podwójne z pewnością można przypisać do int bez wyraźnej obsady. Ta część odpowiedzi musi zostać zmieniona. –

5

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.

7

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; 
+0

0.f brzmi jak szesnastkowa wartość zmiennoprzecinkowa :) –

+1

Tak, C ma kłopoty, jeśli chce kiedykolwiek obsługiwać literały hex z punktu pływającego, nieprawdaż? :-) – Nosredna

+0

Czy możesz rozwinąć proszę? dlaczego miałbym kiedykolwiek przydzielić 0? – pingu

Powiązane problemy