读取未初始化的变量

St.*_*rio 0 c++ language-lawyer

读取未初始化的变量会导致未定义的行为,例如

#include <iostream>

int main()
{
    int a;
    std::cout << a << std::endl; // undefined behavior
}
Run Code Online (Sandbox Code Playgroud)

有人可以对这个事实给出正式的解释吗?

Ste*_*n C 5

我认为这是相关部分:

4.1 左值到右值的转换

1 - 非函数、非数组类型 T 的左值可以转换为纯右值。如果 T 是不完整类型,则需要此转换的程序是格式错误的。如果泛左值引用的对象不是 T 类型的对象,也不是从 T 派生的类型的对象,或者该对象未初始化,则需要此转换的程序具有未定义的行为

变量是左值,我认为“左值到右值转换”是获取变量值的过程。

(注意 - 我不熟悉 C++ 标准,所以我可能没有找到适用于此示例的部分。我所做的只是在 PDF 中搜索“未初始化”,并查找看起来相关的命中。)