对于嵌入式项目,我想知道标准兼容的C编译器(C99)和C++编译器(C++11)什么时候最有可能隐式地将单个浮动变量/值提升为双浮动。
我知道有两个案子:
f后缀的文字。例如:3.14...)的函数还有其他的吗?模板呢?
this question的答案对我也很有帮助--包括这里的答案,以供参考。
发布于 2016-03-15 09:25:19
在C中:
带有.且没有后缀的数字文字(例如3.14 )不涉及任何升级。它是double的整个生命周期。
如果浮点数是函数调用的参数,而被调用的函数在作用域中没有原型,或者参数对应于范围内原型中的省略号(,...),则浮点数被提升为。
在以下任何一种情况下,浮点数被转换为以加倍:
double类型的参数。double和float作为两种参数类型。适用于此的操作符是:* / + - < > <= >= == !=double和float作为第二个和第三个操作数(按任一顺序排列)doubledouble (包括复合赋值)在C++中,所有上述情况都仍然适用,除了关于没有原型的情况(因为C++要求所有函数调用都有一个原型)。
有一个新的例子:standard conversion sequence太复杂了,不能简单概括。但是作为一个例子,这个C++代码包含了从float到double的隐式转换:
class T { public: T(double dummy) {} };
void foo(T);
foo(3.14f); // Conversion sequence: float->double->T不过,我不确定这是否是C++的详尽列表。
https://stackoverflow.com/questions/36006770
复制相似问题