在不同的范围访问具有相同名称的变量

Por*_*jim 6 c++ scope

#include <iostream>
using namespace std;

        int a = 1;

int main()
{
        int a = 2;

        if(true)
        {
                int a = 3;
                cout << a 
                     << " " << ::a // Can I access a = 2 here?
                     << " " << ::a << endl;
        }
        cout << a << " " << ::a << endl;
}
Run Code Online (Sandbox Code Playgroud)

有输出

3 1 1
2 1
Run Code Online (Sandbox Code Playgroud)

有没有办法在if语句中访问等于2的'a',其中'a'等于3,输出

3 2 1
2 1
Run Code Online (Sandbox Code Playgroud)

:我知道这应该不会做(和代码不应该得到的地方,我要问的点).这个问题更" 可以做".

Eri*_*rik 10

不,你不能,(2)被隐藏.

参考:3.3.7/1

名称可以通过嵌套声明性区域或派生类(10.2)中相同名称的显式声明来隐藏.

参考:3.4.3/1

在将:: scope resolution运算符(5.1)应用于指定其类或名称空间的嵌套名称说明符之后,可以引用类或名称空间成员的名称.在查找:: scope resolution运算符之前的名称期间,将忽略对象,函数和枚举器名称.如果找到的名称不是类名(第9节)或命名空间名(7.3.1),则程序格式不正确.