内部类如何访问多级外部类

5
以下是在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();
}

这是标准的吗?我看到了另一个SO帖子,其中一个答案将内部类与友元类进行比较,但朋友的朋友不是朋友,所以想知道标准是什么。

1个回答

4
标准文档(草案n3337,11.7 [class.access.nest])表示:嵌套类是一个成员,因此具有与其他成员相同的访问权限。包含类的成员无法特殊地访问嵌套类的成员;应遵守通常的访问规则(第11条款)。C3和methC1拥有相同的访问权限。

1
我点赞了这个答案,但我不清楚为什么那个引用意味着权利是间接继承的。我的意思是,C3 仍然是一个嵌套类的嵌套类。 "嵌套的嵌套" 是指 "嵌套" 吗? - imreal
@Nick,我猜这个规则可以递归应用。 - jrok
“+1”表示同意引用,但是哪里说成员资格是可传递的了?该条款暗示C2是C1的成员,因此C2成员可以访问C1的私有成员;C3是C2的成员,因此它可以访问C2的私有成员;虽然将成员资格设为可传递是明智的,但该条款并没有说明它是这样的,也没有说明它可以递归应用。 - Oliver
1
@Schollii 在经过一些搜寻后,我无法找到一个明确表示成员资格是传递的引用。目前这是我能找到的最好的答案了,抱歉 :) - jrok
@jrok 感谢你的努力! - Oliver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接