【发布时间】:2020-05-27 20:05:30
【问题描述】:
如果我在封闭块中定义了一个变量,而在嵌套块中定义了另一个同名变量,我如何从嵌套块中的封闭块访问变量?
int main ()
{
int i = 0;
{
int i;
i = 10;
}
cout << i; // prints 0
}
【问题讨论】:
-
给它一个更好的名字?
标签: c++
如果我在封闭块中定义了一个变量,而在嵌套块中定义了另一个同名变量,我如何从嵌套块中的封闭块访问变量?
int main ()
{
int i = 0;
{
int i;
i = 10;
}
cout << i; // prints 0
}
【问题讨论】:
标签: c++
你有 "shadowed" 之前的定义,所以它基本上没有了。如果您需要访问它,请选择其他名称。就编译器而言,在那个内部块中只有一个i,它不知道它替换的另一个i。
或者给它一个更好的名字:
int i = 0;
{
int ii;
i = 10;
}
cout << i; // prints 10
或者使用函数:
int i = 0;
f(i);
cout << i; // Depends on what f() does.
你在哪里:
void f(int& i) {
i = 10;
}
这会修改原来的i。
【讨论】:
如果可以的话……
重命名:
int main ()
{
int i = 0;
{
int j;
i = 10;
}
cout << j; // prints 10
}
如果你不能..
没办法。内部作用域中的i 遮蔽了外部作用域中的i。声明同名变量后,无法从外部范围访问i。
【讨论】: