Разность С++ между 0 и 0.0

Есть ли разница между 0 и 0.0 в С++? Что вы должны использовать для инициализации двойного?

Спасибо

Ответ 1

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

Ответ 2

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

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

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

float t=0.5f;
float r;

r= 1 * t;

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

float t=0.5f;
float r;

r= 1.0f * t;

Ответ 3

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

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