VS 2010中的以下版本:
class C1
{
private:
enum E {E_VAL};
static void methC1() {}
public:
class C2
{
public:
class C3
{
public:
void methC3()
{
int a=E_VAL; // this surprised me
methC1(); // and this too
}
};
};
};
int main()
{
C1::C2::C3 obj;
obj.methC3();
}
这是标准吗?我看到这个other SO post,答案将内部课程与朋友课程进行比较,但朋友的朋友不是朋友,所以想知道标准是什么。
答案 0 :(得分:4)
标准说(draft n3337, 11.7 [class.access.nest]
):
1 嵌套类是成员,因此具有与任何其他成员相同的访问权限。成员 封闭类对嵌套类的成员没有特殊访问权限;通常的访问规则(第11条) 应遵守。 [...]
这就是它。 C3
具有与methC1
相同的访问权限。