使用
#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;
}
有输出
3 1 1
2 1
有没有办法在if语句中访问等于2的'a',其中'a'等于3,输出
3 2 1
2 1
注意:我知道应该不能完成(并且代码不应该到达我需要询问的地方)。这个问题更“可以完成”。
答案 0 :(得分:9)
不,你不能,a(2)被隐藏。
参考:3.3.7 / 1
名称可以通过显式隐藏 在a中声明同名 嵌套的声明区域或派生的 class(10.2)。
参考:3.4.3 / 1
类或命名空间的名称 会员可以在::之后提及 范围解析运算符(5.1) 应用于嵌套名称说明符 提名其类或命名空间。 在查找之前的名称期间 :: scope resolution运算符, 对象,函数和枚举器名称 被忽略了。如果找到的名称不是 一个类名(第9条)或 namespace-name(7.3.1),程序是 不良形成。
答案 1 :(得分:0)
简答:不。您基本上覆盖了本地的继承范围,并且它将使用该本地副本而不是任何继承的范围。
基本上就像覆盖父对象的函数或变量的子对象一样,无论父对象是什么,它都会使用它的副本。