需要对变量的作用域进行一些解释

Some explanation required regarding the scope of my variable

本文关键字:解释 作用域 变量      更新时间:2023-10-16
/* simple class that has a vector of ints within it */
class A
{
public:
   vector<int> int_list;
};
/* some function that just returns an int, defined elsewhere */
int foo();
/* I want to fill the object's int_list up */
A a_obj;
int main() {
   for (int i = 0; i < 10; i++) {
      int num = foo();
      a_obj.int_list.push_back( num );
   }
}

num的作用域是否仅限于for循环?它会在for循环退出后被销毁吗?如果我试图访问a_obj中的int_list中的数字,我将无法访问,因为里面的数字将被破坏?

num的范围是否仅限于for循环?

是的

一旦for循环退出,它会被销毁吗?

它将在每次迭代后被销毁,然后在下一次迭代时再次创建!

如果我试图访问a_objint_list中的数字,我将无法访问,因为里面的数字将被破坏?

容器存储副本,所以您不必担心这个问题。

只有在使用引用和指针时才会遇到这类问题。

num的作用域是否仅限于for循环?它会被毁灭一次吗for循环退出?

是的,因为num是for循环的本地。

如果我试图访问a_obj的int_list中的数字,我将无法里面的数字会被摧毁吗?

不,当它退出for循环时,list中的数字不会被销毁,因为你正在将数字复制到列表中,并且A a_obj;是在全局作用域中声明的,这意味着它在程序结束时被销毁。

是的,在循环或{ ... }的任何块中定义的变量将只存在于该块中,并且在离开该块时将被销毁。

在循环的情况下,块将在每次迭代中"创建",因此在您的示例中,num不能从早期的迭代中引用。

是的,每次for循环迭代时,它都会在堆栈上创建一个新的num实例。但是您将num的值传递给int_list,它将存储在那里,直到a_obj超出范围