嵌套类嵌套类的访问权限
Access rights of a nested class of a nested class
在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;
}
编译无警告G 7.2。但是,我尚不清楚这符合标准。标准草案(N4727 14.7(说:
嵌套类是成员,因此具有与任何其他成员相同的访问权限。
但是,在上面的C
的示例中,它不是A
的成员,它是成员的成员。这里的标准模棱两可吗?G 行为可移植?
但是,在上面的
C
的示例中,它不是A
的成员,它是成员的成员。
是的,这是定义明确的行为;访问权利从B
传输。
根据标准[class.access]/2,
班级的成员也可以访问类访问的所有名称。
和[class.mem]/1,
类的成员是数据成员,成员功能,嵌套类型,枚举者和成员模板及其专业。
C
是B
的嵌套类,它也是B
的成员,然后C
可以访问B
可以访问的名称,包括A::x
。出于同样的原因,C::C
是C
的成员,它可以访问C
可以访问的名称,因此在C::C
中访问A::x
是可以的。
该行为定义明确,并与标准措辞结合。您缺少的是[class.access]p2
的相关措辞,它增强了您已经引用的内容:
班级的成员也可以访问班级拥有的所有名称 使用权。成员函数的本地类可以访问与 成员功能本身可以访问。
这意味着可访问性是传递性的。如果C
可以访问与B
相同的实体,则也意味着C
可以访问A
中的实体,因为B
可以访问它们。
class A {
class B {
class C {
C() { A::x; /* well-defined */ }
};
};
static int x;
};
相关文章:
- 嵌套在类中时无法设置成员数据
- 无法访问嵌套类.类的使用无效
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 如何在C++中初始化嵌套类中的2个memeber
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 在C++中搜索嵌套多映射值
- 在C++中将矢量转换为嵌套地图
- C++嵌套if语句,基本货币交换
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 嵌套的匿名命名空间
- 了解嵌套循环打印星号图案
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 嵌套for循环C++的问题(初学者)
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 用C#中的并集模拟C++嵌套结构
- 部分专业化和嵌套模板
- 嵌套While循环不起作用(C++问题)
- C++-模板嵌套类的引用初始化无效
- 如何在嵌套类中正确使用友元声明?
- 嵌套类嵌套类的访问权限