2009-09-05 1 views

ответ

14

Буквальное 0 считается быть int буквальным; Литерал 0.0 является литералом double. При назначении double либо будет работать (поскольку int может быть добавлен в расширяющееся преобразование); однако литье 0.0 в int является сужающим преобразованием и должно выполняться явно; т.е. (int)0.0.

+2

и 0.0f - значение поплавка. : D –

+2

@Rob, вы говорите, что двойной не может быть неявно преобразован в int? Рассмотрим 'int a = 0.0;'. –

+1

Двойник, безусловно, может быть привязан к int без явного приведения. Эта часть ответа должна быть пересмотрена. –

5

Один из них представляет собой целочисленный литерал, другой - литерал с плавающей запятой. Для компилятора действительно не имеет значения, инициализируете ли вы float или doubles с целыми литералами. В любом случае литерал будет скомпилирован в некоторое внутреннее представление.

Я хотел бы предложить 0.0, чтобы сделать ваше намерение (другим программистам) явным образом.

7

Я пытаюсь сохранить константы постоянными. 0 для ints. 0.0f или 0.f для float и 0.0 для double.

Для меня самая важная причина для этого - это то, что компилятор и программист видят то же самое.

Если я сделаю это ...

float t=0.5f; 
float r; 

r= 1 * t; 

... должны быть назначены г 0 или 0,5? Там без колебаний, если я это сделаю ...

float t=0.5f; 
float r; 

r= 1.0f * t; 
+0

0.f звучит как шестнадцатеричное значение с плавающей запятой :) –

+1

Да, C находится в беде, если он когда-либо хочет поддерживать шестнадцатеричные литералы с плавающей точкой, не так ли. :-) – Nosredna

+0

Можете ли вы подробно рассказать? зачем было когда-либо назначаться 0? – pingu

 Смежные вопросы

  • Нет связанных вопросов^_^