首页 > 解决方案 > g++ 和 g++14 的未初始化值的差异

问题描述

如果我像这样在 c++ 中编译并运行一个简单的程序:

int main(){
    int x;
    cout << x << endl;
}

我在 Linux 中编译说 g++ myProgram.cc (或 g++ -std=c++14),我显然得到了 ./a.out 可执行文件,它工作正常并且自动初始化值 0 打印。

但是如果我用 g++14 myProgram.cc 编译我的代码,我会收到一个错误,指出 x 未初始化。

g++14 是某种不同的版本吗?我很困惑为什么会这样,谢谢!

标签: c++

解决方案


来自 C++ 参考的初始化部分(适用于所有版本)。您可以推断出局部非静态原始类型变量在声明时不会自动初始化为众所周知的值/状态,您必须明确地进行。请注意,尽管没有被初始化,但它们确实包含一个值,但它不是确定性的,它可以是任何东西,因此您显式初始化的(最重要的)重要性。因此,确保变量具有众所周知和定义的状态。您的代码实际上表现出所谓的未定义行为,因为它使用了一个具有未知和未定义值/状态的变量。

这对所有版本的 C++ 都有效。所以:

  • 你的编译器可能有一个错误,对于像初始化规则这样简单的东西来说不太可能。

  • 它可能是编译器的特定实现细节。

  • 该命令可能正在调用其他内容

作为一个好的做法,这将使您免于将来出现许多错误,请始终在使用它们之前尽快初始化您的变量


推荐阅读