Ответ 1
Тип литерала 3.5
- double
. Для float
используйте 3.5f
Вы можете поиграть с этим фрагментом, чтобы увидеть информацию о различных типах.
В приведенном ниже фрагменте auto
выводит переменную в double
, но я хочу float
.
auto one = 3.5;
Всегда ли он использует double
для литералов с десятичной точкой? Как это решает между поплавком и двойным?
Тип литерала 3.5
- double
. Для float
используйте 3.5f
Вы можете поиграть с этим фрагментом, чтобы увидеть информацию о различных типах.
3.5
является литералом double
. Таким образом, auto
правильно выводит его тип как double
. Вы по-прежнему можете использовать его для инициализации переменной float
, но наиболее правильным способом является использование литерала float
, например 3.5f
. f
в конце называется суффиксом. Суффиксы для литералов с плавающей точкой:
f
F
определяет float l
L
определяет длинный двойной Помимо литералов с плавающей точкой, существуют также суффиксы для интегральных литералов и пользовательских литералов.
В C++ (и C) плавающие литералы обрабатываются как double
по умолчанию, если не указано в f or F or l or L
.
Стандарт имеет следующее:
2.14.4 Тип плавающего литерала - двойной, если явно не указано суффиксом. Суффиксы f и F указывают float, суффиксы l и L указывают long double. Если масштабированное значение не входит в диапазон представимых значений для его типа, программа имеет некорректную форму.
Следовательно,
auto one = 3.5;
всегда double
, и если вы собираетесь float
это должно быть закодировано как
auto one = 3.5f;
Тип литерала с плавающей запятой в C++ автоматически double
, если:
Суффикс f
, в этом случае тип литерала float
L
имеет суффикс, и в этом случае тип литерала будет long double
Итак, если вы хотите, чтобы ваша переменная была float
, сделайте следующее:
auto one = 3.5f;