【发布时间】:2023-03-07 16:42:01
【问题描述】:
请考虑以下 C++ sn-p:
#include <iostream>
int main() {
int x;
std::cout << x << '\n';
return 0;
}
正如预期的那样,由于变量x 尚未初始化,因此打印的结果将是不可预测的。如果你运行它可能会得到 458785234 和 348934610 第二次。但是,如果您按以下方式更改代码:
#include <iostream>
int main() {
int x;
std::cout << x << std::endl;
return 0;
}
现在,打印的 x 始终等于 0。这是为什么?请注意,引入的唯一更改是std::endl。谁能解释为什么这会将 0 分配给 x 变量?
【问题讨论】:
-
x未初始化。你不应该对它的价值抱有任何期望。 (严格来说,这是U.B.。)所以,答案可能是“为什么不”。 ;-) -
“现在,打印的 x 始终等于 0。” 仅在您测试过的情况下。这是未定义的行为,因此它在其他平台、其他编译器或没有明显原因的情况下可能会有所不同。
-
尝试用一个值初始化
x。例如int x = 1 -
很有趣(只要查看未定义的行为很有趣)。生成的程序集告诉你什么关于它总是在第二种情况下为零?
-
对于“为什么我的未定义行为未定义”问题是否存在通用重复项?