int i = 1;
int main()
{
int i = 2;
{
int i = 3;
cout << ::i << endl; //i want to print 2, neither 1 nor 3
}
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想打印2.默认情况下,cout << i << endl; print 3和cout << :: i << endl; 打印1.
当嵌套范围中的另一个本地名称隐藏了本地名称时(例如i,值为2 i且值为3),无法引用本地名称.您可以做的最好的事情是在它仍处于范围内时创建对它的引用:
int main()
{
int i = 2;
int& middle_i = i;
{
int i = 3;
cout << middle_i << endl; //will print 2
}
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当然,实际上正确的解决方案不是隐藏您需要访问的名称,因此重命名其中一个局部i变量.
由于问题也被标记c,请注意C缺少引用和范围解析运算符(::),所以在C中你使用指针(甚至比这方面的参考更差),或遵循"实际上正确"解决方案"甚至强烈而不隐藏您打算使用的任何名称.