关于变量范围的一些解释

时间:2011-11-09 10:10:04

标签: c++ scope

/* 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中的数字,我将无法将内部数字销毁?

4 个答案:

答案 0 :(得分:5)

  

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

  

退出for循环后它会被销毁吗?

每次迭代后它都会被销毁,然后再为下一次迭代创建!

  

如果我尝试访问a_obj int_list中的数字,我将无法将内部数字销毁?

容器存储副本,因此您不必担心这一点。

你只会遇到引用和指针这些问题。

答案 1 :(得分:1)

  

num的范围是否仅限于for循环?它会被摧毁一次吗?   退出for循环?

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

  

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

不,列表中的数字在退出for循环时不会被销毁,因为你将数字复制到列表中并且A a_obj;在全局范围内声明,这意味着它在最后被销毁你的计划。

答案 2 :(得分:0)

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

在循环的情况下,块将在每次迭代时“创建”,因此在您的示例中num无法从早期迭代中引用。

答案 3 :(得分:0)

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