局部变量名称冲突

Local variables name collision

本文关键字:冲突 变量名 局部      更新时间:2023-10-16

如果我在封闭块中定义一个变量,在嵌套块中定义另一个同名变量,如何从嵌套块内的封闭块访问变量?

int main ()
{
int i = 0;
{
int i;
i = 10;
}
cout << i; // prints 0
}

你已经"遮蔽"了前面的定义,所以它基本上消失了。如果需要访问它,请选择其他名称。就编译器而言,在该内部块中只有一个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