如果f是double,f + = 1和f + = 1.0之间有什么区别吗?

时间:2014-06-26 06:20:10

标签: c++

假设我们有double f;

f+=1f+=1.0之间有什么区别吗?

编译器如何处理这些情况?

我试过我的电脑并循环10次 10次次,经过的时间几乎相同

4 个答案:

答案 0 :(得分:3)

这里参考c ++ 03。

  

4.9浮动积分转换[conv.fpint]

     

整数类型或枚举类型的右值可以是   转换为浮点类型的右值。结果是准确的   如果可能的话。否则,它是实现定义的选择   要么是下一个更高或更高的可表示值。

如果您的系统可以完全表示1.0(并且看起来可以),那么表达式是相同的。

答案 1 :(得分:2)

在任何自尊的编译器中没有区别,隐式转换肯定会在编译时执行,甚至可能在禁用优化的情况下执行。如果您有疑问,可以随时检查生成的装配。

现在,从风格上讲,我更喜欢永远保持"正确"的常量。类型(特别是在某些术语可能会在以后更改为int的表达式中),尽管有些人认为所有尾随.0只会添加视觉混乱(但是:你可以避免尾随0而只是离开点以指定双字面值 - 如1.中所示。

答案 2 :(得分:0)

非优化构建可能会略有不同:整数常量1可以(应该?)在运行时而不是编译时提升为double。

答案 3 :(得分:0)

您的系统始终可以check

#include <iostream>
#include <type_traits>

using namespace std;

int main() 
{
    double f(0.);
    cout << std::is_same<decltype(f+1), decltype(f+1.)>::value << endl;
    return 0;
}

如果有人发现他们不同的情况,我很感激评论