C++ 为什么自动将这个变量推断为double而不是float?
在下面的代码段中,C++ 为什么自动将这个变量推断为double而不是float?,c++,floating-point,literals,auto,type-deduction,C++,Floating Point,Literals,Auto,Type Deduction,在下面的代码段中,auto将变量推断为double,但我想要float auto one = 3.5; 它是否总是对带小数点的文字使用double?它是如何决定浮点和双精度的?文本3.5的类型是double。对于float请使用3.5f 您可以使用查看各种类型的信息。3.5是一种双文字。因此,auto正确地将其类型推断为double。您仍然可以使用它初始化float变量,但最正确的方法是使用float文本,如3.5f。末尾的f称为后缀。浮点文字的后缀为: (无后缀)定义双精度 ff定义浮点
auto
将变量推断为double
,但我想要float
auto one = 3.5;
它是否总是对带小数点的文字使用
double
?它是如何决定浮点和双精度的?文本3.5
的类型是double
。对于float
请使用3.5f
您可以使用查看各种类型的信息。
3.5
是一种双
文字。因此,auto
正确地将其类型推断为double
。您仍然可以使用它初始化float
变量,但最正确的方法是使用float
文本,如3.5f
。末尾的f
称为后缀。浮点文字的后缀为:
- (无后缀)定义双精度
f
定义浮点f
l
定义长双精度l
auto one = 3.5;
始终是double
,如果您打算float
它应该编码为
auto one = 3.5f;
C++中浮点文字的类型是自动<代码>双< /代码>,除非:
f
是后缀,在这种情况下,文本的类型是float
L
是后缀,在这种情况下,文本的类型是long double
浮点
,请执行以下操作:
auto one = 3.5f;
要回答您的确切问题(而不是您想知道的内容)auto以这种方式推导,因为模板是以这种方式推导的。模板这样推断是因为函数重载(函数重载规则用于打破关系)代码>推导
double
与生成intf(float)的规则相同;int f(双)当显示f(3.5)
时,选择f(双精度)
。您的问题与auto
无关,它只涉及浮点文本3.5
的类型和类别,因为3.5
是一个双精度,而不是float
@JustinTime:虽然在C中,字符文本是typeint
,但是,当C看起来像C的代码被编译成C和C++编译器时,这会引起微妙的错误,但是取决于字符文字是具体的代码> char < /> >或<代码> int >代码(更有趣的是,可能取决于代码的定义,即代码< char < /Code >)。