需要对变量的作用域进行一些解释
Some explanation required regarding the scope of my variable
/* 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_obj
的int_list
中的数字,我将无法访问,因为里面的数字将被破坏?
容器存储副本,所以您不必担心这个问题。
只有在使用引用和指针时才会遇到这类问题。
num的作用域是否仅限于for循环?它会被毁灭一次吗for循环退出?
是的,因为num
是for循环的本地。
如果我试图访问a_obj的int_list中的数字,我将无法里面的数字会被摧毁吗?
不,当它退出for循环时,list中的数字不会被销毁,因为你正在将数字复制到列表中,并且A a_obj;
是在全局作用域中声明的,这意味着它在程序结束时被销毁。
是的,在循环或{ ... }
的任何块中定义的变量将只存在于该块中,并且在离开该块时将被销毁。
在循环的情况下,块将在每次迭代中"创建",因此在您的示例中,num
不能从早期的迭代中引用。
是的,每次for循环迭代时,它都会在堆栈上创建一个新的num实例。但是您将num的值传递给int_list,它将存储在那里,直到a_obj超出范围
相关文章:
- 未在作用域中声明unordered_map
- 有没有一种方法可以在编译时获得作用域类名
- C++quit()函数中可能存在作用域问题
- 未在此作用域OpenCV3.4中声明cvSaveImage
- 全局作用域中函数指针的赋值
- 在类函数中初始化外部作用域变量
- 不同作用域中的静态变量和全局变量
- 是同一作用域的函数部分中的函数调用
- 未在此作用域中声明的函数和变量 (C++)
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 将作用域枚举转换为基础类型
- 表达式必须具有完整或无作用域的枚举图
- 在构造函数中输入对象时C++类成员作用域
- 无法让"std::enable_if"适用于无作用域枚举
- 为什么不能直接引用作用域枚举类成员,而不能为无作用域枚举生成类成员?
- 函数未在作用域中声明 / 如何结合使用 header.h、header.cpp 和 main.cpp?
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 如何在C++中访问作用域的变量输出?
- 重载时未在 C++ 的作用域错误中声明
- 需要对变量的作用域进行一些解释