当我使用代码时:
#include <iostream>
using namespace std;
int main()
{
while(1) {
int a;
if(a != 0) {
cout << a << endl;
break;
}
}
return 0;
}
该计划永远不会停止。
我了解到未分配的变量存储了内存中特定位置的内容。 为什么a的值始终为0?
也许是因为我的大内存容量还是仅仅是编译器? 我使用GNU编译器C ++ 11 我使用Release构建配置。 我也是这种语言的新手。
编辑: 我使用g ++编译器,得到了答案。
答案 0 :(得分:4)
读取未初始化的变量是&#34;未定义的行为&#34; - 意思是&#34;任何事情都可能发生,你的编译器可以随意做任何事情&#34; (而不仅仅是有问题的变量,实际上是你的整个程序)。
不要在程序中调用未定义的行为。或遭受(不可预测的)后果。
答案 1 :(得分:3)
这取决于编译器和选项。您正式拥有不确定值。但是g ++编译器倾向于将这些变量设置为0。
考虑机器代码级别发生的情况,如果第一次执行通过声明时a
为0,则程序中没有任何内容可以合理地导致该内存位置中的值发生更改,因此然后你得到一个无限循环。
然而,在源代码级别,使用该不确定值(包括仅检查它)会产生正式的未定义行为,其中可能发生任何事情或任何事情,包括预期会发生的事情。 :)
答案 2 :(得分:2)
当你没有为变量赋值,然后引用它时,程序的行为没有被定义为该值可能是那个内存位置的运气垃圾。在你的情况下,幸运的是它始终为零。如果您更改操作系统/编译器/编译器选项,甚至更改操作系统中正在发生的操作,您可能会得到不同的结果。