Rob*_*own 8 c++ inner-classes language-lawyer
在C++中,嵌套类具有对封闭类的所有成员的访问权限.这是否也适用于嵌套类的嵌套类?
这段代码
#include <iostream>
class A
{
public:
class B
{
public:
B() { std::cout << A::x << std::endl; }
class C
{
public:
C() { std::cout << A::x << std::endl; }
};
};
private:
static const int x { 0 };
};
int main()
{
A::B b;
A::B::C c;
}
Run Code Online (Sandbox Code Playgroud)
在g ++ 7.2上编译时没有警告.但是,我不清楚这是否符合标准.标准草案(N4727 14.7)说:
嵌套类是成员,因此具有与任何其他成员相同的访问权限.
但是,在上面的示例C中不是其成员A,它是成员的成员.这里的标准模棱两可吗?g ++行为是否可移植?
但是,在上面的示例
C中不是其成员A,它是成员的成员.
是的,这是明确的行为; 访问权转移B.
根据标准[class.access]/2,
类的成员还可以访问该类可以访问的所有名称.
类的成员是数据成员,成员函数,嵌套类型,枚举器以及其成员模板和特化.
C是一个嵌套类B,它也是其成员B,然后C可以访问可以访问的名称B,包括A::x.出于同样的原因,C::C是的成员C,它可以访问哪些名称C可以访问到,所以访问A::x的C::C罚款.
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |