为什么在MSVC中默认将浮点值(如3.14)视为双精度?

jok*_*oon 10 c++ floating-point double visual-c++

为什么我需要输入3.14f而不是3.14才能禁用所有这些警告?这有一个连贯的原因吗?

nos*_*nos 19

这就是C++(和C)标准所决定的.浮点文字是double类型,如果你需要它们是浮点数,你用它们后缀它们f.似乎没有任何具体说明原因,但我猜它是a)与C兼容,和b)精确度和存储之间的权衡.

2.13.3浮动文字除非后缀明确指定,否则浮动文字的类型为double.后缀f和F指定float,后缀l和L指定long double.如果缩放值不在其类型的可表示值范围内,则程序格式不正确.


Ste*_*sop 5

C和C++更喜欢以两种方式浮动.正如您所注意到的,除非明确地生成浮点数,否则小数文字是双精度的.此外,浮点数不能在varargs中传递,它们总是被提升为double(同样,char和short在varargs中被提升为int).

最好将其float视为一种契约double,而不是double延伸float.也就是说,double它是首选的浮点类型,并且float只要double某些特定情况需要较小版本,就会使用它.这是我所知道的一个连贯的理由,然后规则才有意义,即使你碰巧遇到需要较小版本的情况.