当"全局","本地"和"非常本地"变量存在同名时,如何访问"本地"变量

Jap*_*pun 3 c++ scope

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.

Rei*_*ica 8

当嵌套范围中的另一个本地名称隐藏了本地名称时(例如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中你使用指针(甚至比这方面的参考更差),或遵循"实际上正确"解决方案"甚至强烈而不隐藏您打算使用的任何名称.