循环变量生命周期的C++很奇怪

pag*_*ist 5 c++ variables scope initialization lifetime

for(int i = 0; i < 3; i++)
{
    for(int j = 0; j < 3; j++)
    {
        int n;
        n++;
        printf("n : %d\n", n)'
    }
}
Run Code Online (Sandbox Code Playgroud)

代码的输出是1 2 3 4 5 6 7 8 9.我想知道为什么在执行变量声明时for循环中的变量n没有被初始化.

sea*_*erd 13

您永远不会将n初始化为特定值.调用时,默认情况下C++不会执行此操作int n.相反,它只保留一个整数大小的内存块.因此,当您调用时n++,程序只是抓住该内存中发生的任何值并递增它.由于你是快速连续执行此操作而不是在它们之间创建新变量,所以它恰好一遍又一遍地抓取相同的内存.正如@NicolasBuquet指出的那样,编译器优化也可能与选择相同内存块的一致性负责.

如果要为n赋值,(即int n = 1;)此行为将消失,因为特定值将写入分配给n的内存块.

  • 我认为这也是由于优化:如您在申报的循环的每个迭代相同int变量,我thnk编译器优化,并把变量外循环,而不是在每个步骤建立它. (2认同)