Это зависит от того, как вы определяете свою переменную. При указании типа float
в определении добавление конечного f
не требуется:
float amount = 0.1; /* This is fine, compiler knows the type of amount. */
Добавление лишнего литерала здесь (float amount = 0.1f;
) может даже считаться плохой практикой, поскольку вы повторите информацию о типе, в результате чего вы измените тип редактирования.
Однако в контексте вывода типа вы должны предоставить литерал f
:
auto amount = 0.1f; /* Without the literal, compiler deduces double. */
Есть более тонкие контексты, в которых происходит декомпозиция типа, например
std::vector<float> vecOfFloats;
/* ... */
std::accumulate(vecOfFloats.cbegin(), vecOfFloats.cend(), 0.1f);
. Здесь третий аргумент используется для вывода типа, на котором работает std::accumulate
. Если вы просто назовете это как std::accumulate(..., 0.1);
, для каждого элемента в vecOfFloats
будет выполнено преобразование с двойным преобразованием с плавающей точкой.