Почему auto выводит эту переменную как double, а не как float?
В приведенном ниже фрагменте auto выводит переменную в double, но я хочу float.
auto one = 3.5;
Всегда ли он использует double для литералов с десятичной точкой? Как это решает между поплавком и двойным?
Ответ 1
Тип литерала 3.5 - double. Для float используйте 3.5f
Вы можете поиграть с этим фрагментом, чтобы увидеть информацию о различных типах.
Ответ 2
3.5 является литералом double. Таким образом, auto правильно выводит его тип как double. Вы по-прежнему можете использовать его для инициализации переменной float, но наиболее правильным способом является использование литерала float, например 3.5f. f в конце называется суффиксом. Суффиксы для литералов с плавающей точкой:
В 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;
Ответ 4
Тип литерала с плавающей запятой в C++ автоматически double, если:
Суффикс f, в этом случае тип литерала float
L имеет суффикс, и в этом случае тип литерала будет long double
Итак, если вы хотите, чтобы ваша переменная была float, сделайте следующее: