Pat*_* B. 3 c c++ compilation c++11
对于嵌入式项目,我想知道符合标准的C编译器(C99)和C++编译器(C++ 11)何时可能隐式地将单浮点变量/值提升为double-float.
我知道有两种情况:
f.例如:3.14...)将float传递给函数还有其他人吗?模板怎么样?
这个问题的答案对我来说也很有帮助 - 包括它在这里供参考.
在C:
具有.且没有后缀的数字文字,例如3.14,不涉及任何促销.这是double它的整个生命.
如果float是函数调用的参数,则float 被提升为 double,并且被调用的函数在范围内没有原型,或者参数对应...于范围中原型中的省略号().
在以下任何一种情况下,float都会转换为double:
double于范围中原型中的类型参数.double和float作为两个参数类型.适用的运营商是:* / + - < > <= >= == !=double和float作为第二个和第三个操作数(以任何顺序)doubledouble(包括复合赋值)在C++中,除了没有原型的情况之外,所有上述情况仍然适用(因为C++要求所有函数调用都在范围内有原型).
有一个新的案例:标准转换序列过于复杂,无法简要概括.但作为一个例子,这个C++代码包含的隐式转换float到double:
class T { public: T(double dummy) {} };
void foo(T);
foo(3.14f); // Conversion sequence: float->double->T
Run Code Online (Sandbox Code Playgroud)
我不确定这是否是C++的详尽列表.
| 归档时间: |
|
| 查看次数: |
597 次 |
| 最近记录: |