【发布时间】:2020-01-20 16:39:03
【问题描述】:
我很难理解这个由两个不同编译器编译的简单示例发生了什么:
#include <iostream>
using namespace std;
int main()
{
double x;
cout << x << endl;
x += 1.0;
cout << x << endl;
return 0;
}
用 g++ 编译会得到
0
1
当用 clang++ 编译时,它给出了
6.95279e-310
1
我确信这是我缺乏理解,但任何理解这种行为的提示将不胜感激。重新分配时是否从 clang++ 设置 x = 0 生成编译代码,但在使用 cout 显示时不是?这是预期的行为吗?
问题:是否应该总是因为这些差异而初始化变量? C++ 中的常见做法是什么?
【问题讨论】:
-
这是未定义的行为
-
“是否应该始终初始化变量” 是的。
-
另外,在开始处理浮点数之前,您应该阅读this。
-
这是 AAA(几乎总是自动)帮助完全避免的错误之一,因为如果你写
auto x = 0;,你就不能忘记初始化x -
第二种情况下你期望什么输出?
1.00000....(300 zeros)...00000695279?
标签: c++