【发布时间】:2016-07-07 00:00:18
【问题描述】:
我对以下代码感到困惑:
#include <iostream>
int i = 1;
int main()
{
int i = i;
std::cout << "i: " << i << "\n";
return 0;
}
输出:
i: 0
我原以为运行上面的代码会打印出1。有人可以解释一下这种奇怪行为的原因吗?
【问题讨论】:
-
发生奇怪的事情时,通常是UB。
-
警告 "main.cpp:13:13: Variable 'i' is uninitialized when used in its own initialization: 由合理的编译器给出可能是对问题的提示。也许会堵塞你的警告级别并听取他们的建议。
-
当您分配 int i= i; 时,i 会使用您刚刚声明的 i 的值进行初始化,因此是未定义的值。
-
请始终使用
-Wall -Werror进行编译 -
旁白:以防你不熟悉undefined behavior