C++嵌套类可访问性

q09*_*987 26 c++ oop

给出以下代码而不考虑两个类之间的友谊:

class OutSideClass
{
...
public:
    int i_pub;
protected:
    int i_pro;
private:
    int i_pri;

    class InSideClass
    {
        ...
        public:
            int j_pub;
        protected:
            int j_pro;
        private:
            int j_pri;
    };
};
Run Code Online (Sandbox Code Playgroud)

问题1> OutSideClass是否只能访问InSideClass的公共成员

问题2> InSideClass是否可以访问OutSideClass的所有成员

如果我的理解不正确,请纠正我.

Naw*_*waz 31

问题1> OutSideClass是否只能访问InSideClass的公共成员

问题2> InSideClass是否可以访问OutSideClass的所有成员

不,在C++ 03中.是的,在C++ 11中.


标准文本对此非常清楚:

C++标准(2003)以11.8美元/ 1 [class.access.nest]的形式说,

嵌套类的成员对封闭类的成员没有特殊访问权限,也没有对已经为封闭类授予友谊的类或函数的特殊访问权限.应遵守通常的准入规则(第11条).封闭类的成员对嵌套类的成员没有特殊访问权限; 应遵守通常的准入规则(第11条).

但是,标准报价有一个缺陷.它说嵌套类无法访问封闭类的私有成员.但在C++ 11,已经更正:在C++ 11,嵌套类确实有访问外围类的私有成员(虽然外围类仍然没有访问嵌套类的私有成员).

查看此缺陷报告: