同
#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),则程序格式不正确.