c++ - 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++ 都有效。所以:
你的编译器可能有一个错误,对于像初始化规则这样简单的东西来说不太可能。
它可能是编译器的特定实现细节。
该命令可能正在调用其他内容。
作为一个好的做法,这将使您免于将来出现许多错误,请始终在使用它们之前尽快初始化您的变量。
推荐阅读
- vue.js - VUE 使用 axios- 从服务器接收但未显示的数据
- css - 闪亮的模态:宽度自动调整到里面的内容
- python - Python可以使用不同的格式化程序将日志记录到同一个文件中吗
- azure - 多个 Azure 区域上的 Azure AD DS
- java - 将本机查询重构为 JPQL 查询
- linux - 通过虚拟零调制解调器连接的两个真实串行端口(在 linux 或 windows 中)
- git - 在 vsts 环境中将 git 作为源代码,是否可以克隆子文件夹并将其从一个存储库推送到另一个存储库?
- python - 无法将 python 解释器安装到 /System/Library/Frameworks/
- mysql - 如何在设置 WordPress 的配置时访问 mysql 数据库详细信息以输入?
- python - python替换捕获组值