C++是否重制了循环中定义的变量?

Gal*_*axy 1 c++ memory loops

当在C++中的循环内声明变量时,C++是否在循环的每次迭代中重制变量?我的意思是,它是否为另一个num变量重新分配内存?因此,如果循环迭代5次,您是否获得5个num具有自己唯一值的独立变量?在循环开始之前声明变量是一种更好的做法,即使该变量仅在循环内使用?如果我想将变量用作计数器或占位符怎么办?

// is this better code?
// int num;
for (int i = 0; i < 5; i++) {
  int num;
  // do stuff with num
}
Run Code Online (Sandbox Code Playgroud)

Bri*_*ian 6

是的,如果num是循环内的定义,则每次循环运行时它将代表一个不同的变量.每次控件通过其定义时,它将被新初始化(如果有的话),并且每次循环的迭代结束时,它将被销毁.

通常应在尽可能最窄的范围内声明变量.因此,如果num不需要将其值从一次迭代保留到下一次迭代,则通常应在循环内定义.如果确实需要将其值从一次迭代保留到下一次迭代,则必须在循环外定义.

这种风格最佳实践有一些例外,例如初始化很昂贵.


Rem*_*eau 5

编译器可以优化内存使用,因此变量仅物理分配一次,然后在每次循环迭代中重用。但是,一般来说,YES,范围规则要求每次循环迭代对变量的不同实例进行操作。在复杂类型的情况下,如类/结构,这意味着在每次循环迭代中调用变量的构造函数和析构函数。