首页 > 解决方案 > 使用 clang++ 和 g++ 在 C++ 中进行变量初始化

问题描述

我很难理解这个由两个不同编译器编译的简单示例发生了什么:

#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 ++中的常见做法是什么?

标签: c++

解决方案


您正在经历的是未定义的行为。在 C++ 中,变量不会为您初始化。

您的程序的输出可能因编译器而异,如果您多次运行它或在不同的机器上运行它,它甚至可能会改变它的结果。

启用了 SDL 检查的 Visual Studio 2019 甚至无法编译它。

所以是的,您应该始终在使用变量之前对其进行初始化。


推荐阅读