You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中嵌套类的嵌套类是否拥有外围类成员的访问权限?

深层嵌套类是否有权访问最外层外围类的所有成员?

放心,你的代码完全符合C++标准,g++ 7.2无警告编译的结果是正确的——深层嵌套类(比如示例里的A::B::C)确实可以访问最外层外围类(A)的所有成员,包括私有成员。

为什么这是合法的?

C++标准里关于嵌套类访问权限的规则(出自[class.access.nest]章节)有明确说明:

嵌套类属于外围类的成员,拥有和其他成员相同的访问权限。外围类的成员访问嵌套类成员时要遵循常规规则,但反过来,嵌套类的成员可以无障碍访问其外围类的所有成员。

对于多层嵌套的情况,这个权限是“穿透”的:A::B是A的成员,所以B能访问A的私有成员;而A::B::C是B的成员,同时它也属于A的嵌套成员范畴,因此C同样有权访问A的所有成员——包括私有静态成员x。

结合你的代码来看

我们拆解一下你的示例代码:

#include <iostream>
class A {
public:
    class B {
    public:
        B() { std::cout << A::x << std::endl; } // 合法:B是A的嵌套类,可直接访问A的私有成员
        class C {
        public:
            C() { std::cout << A::x << std::endl; } // 合法:C是B的嵌套类,继承了对A成员的访问权限
        };
    };
private:
    static const int x { 0 };
};
int main() {
    A::B b;
    A::B::C c;
}

不管嵌套多少层,只要是从外围类逐层嵌套出来的类,都能访问最外层(以及每一层)外围类的私有、保护和公有成员。这就是你的代码能正常编译运行的原因。

内容的提问来源于stack exchange,提问作者Robert E. Brown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:24:03