在C++中为循环定义的局部变量

Ahm*_*del 8 c++ variables for-loop local

在下面的C++代码中:

    for (int i=0; i<10; i++)
    {
        int y = someFunctionCall();

        //Some statements
    }
Run Code Online (Sandbox Code Playgroud)

是每次循环迭代时分配的变量(y),然后在迭代完成时取消分配,或者为所有循环迭代分配一次?

提到的代码是否等同于以下内容?:

    int y;
    for (int i=0;i<10;i++)
    {
        y = someFunctionCall();

        //Some statements
    }
Run Code Online (Sandbox Code Playgroud)

Aas*_*set 6

调用函数时,它将在堆栈上分配一次.在性能方面,这两种方式之间没有区别(但回想一下,使用最后一种方式,y在循环之后仍然在范围内).变量似乎在每次迭代之间被创建和销毁(因此它在迭代之间"丢失"它的值)是由编译器创建的行为; 实际的内存位置始终是相同的.


Man*_*Way 3

它不是每次都分配,但是在每次迭代中都会分配一个新值。循环位于一个方法内,该方法有自己的堆栈帧。变量 y 分配在该堆栈帧中。