读取未初始化的变量会导致未定义的行为,例如
#include <iostream>
int main()
{
int a;
std::cout << a << std::endl; // undefined behavior
}
有人可以正式解释这个事实吗?
答案 0 :(得分:4)
我认为以下是相关部分:
4.1 Lvalue-to-rvalue转换
1 - 非函数非数组类型T的glvalue可以转换为prvalue。如果T不完整 类型,需要这种转换的程序是不正确的。如果 glvalue引用的对象不是T和T类型的对象 不是从T,或对象派生的类型的对象 未初始化,需要进行此转换的程序 未定义的行为。
变量是左值,我认为“左值转换的左值”是获取变量值的过程。
(注意 - 我不熟悉C ++标准,所以我可能没有找到适用于这个例子的部分。我所做的只是搜索PDF“未初始化”,并寻找看起来最相关。)