对于嵌入式项目,我想知道符合标准的C编译器(C99)和C ++编译器(C ++ 11)何时最有可能隐式地将单浮点变量/值提升为双倍浮。
我知道有两种情况:
f
为后缀的文字。例如:3.14
...
)还有其他人吗?模板怎么样?
this question的答案对我也非常有帮助 - 包括在此供参考。
答案 0 :(得分:7)
在C:
带有.
并且没有后缀的数字文字,例如3.14
,不涉及任何促销活动。它的整个生命周期都是double
。
如果float是函数调用的参数,则float 提升为double,并且被调用的函数在范围内没有原型,或者参数对应省略号({{1}在范围内的原型中。
在以下任何一种情况下,浮动转换加倍:
...
类型的参数。double
和double
作为两种参数类型。适用的运算符为:float
* / + - < > <= >= == !=
和double
作为第二个和第三个操作数(以任意顺序排列)float
double
(包括复合分配)在C ++中,除了没有原型的情况外,所有上述情况仍然适用(因为C ++要求所有函数调用都在范围内有原型)。
有一个新案例:standard conversion sequence太复杂,无法简要总结。但作为示例,此C ++代码包含从double
到float
的隐式转换:
double
我不确定这是否是C ++的详尽列表。