首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候C和C++-编译器转换或促进浮动为双,隐式?

什么时候C和C++-编译器转换或促进浮动为双,隐式?
EN

Stack Overflow用户
提问于 2016-03-15 09:07:42
回答 1查看 1.1K关注 0票数 5

对于嵌入式项目,我想知道标准兼容的C编译器(C99)和C++编译器(C++11)什么时候最有可能隐式地将单个浮动变量/值提升为双浮动。

我知道有两个案子:

  1. 没有f后缀的文字。例如:3.14
  2. 将浮点数传递给具有可变参数列表(...)的函数

还有其他的吗?模板呢?

this question的答案对我也很有帮助--包括这里的答案,以供参考。

EN

回答 1

Stack Overflow用户

发布于 2016-03-15 09:25:19

在C中:

带有.且没有后缀的数字文字(例如3.14 )不涉及任何升级。它是double的整个生命周期。

如果浮点数是函数调用的参数,而被调用的函数在作用域中没有原型,或者参数对应于范围内原型中的省略号(...),则浮点数被提升为

在以下任何一种情况下,浮点数被转换为以加倍:

  • 浮点数是一个函数调用的参数,该参数对应于范围内原型中的double类型的参数。
  • 二进制运算符将doublefloat作为两种参数类型。适用于此的操作符是:* / + - < > <= >= == !=
  • 条件运算符以doublefloat作为第二个和第三个操作数(按任一顺序排列)
  • 浮子被转换为double
  • 浮点数被分配给一个double (包括复合赋值)

在C++中,所有上述情况都仍然适用,除了关于没有原型的情况(因为C++要求所有函数调用都有一个原型)。

有一个新的例子:standard conversion sequence太复杂了,不能简单概括。但是作为一个例子,这个C++代码包含了从floatdouble的隐式转换:

代码语言:javascript
复制
class T { public: T(double dummy) {} };
void foo(T); 
foo(3.14f); // Conversion sequence: float->double->T

不过,我不确定这是否是C++的详尽列表。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36006770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档