c++ - 什么是成员子对象?
问题描述
在 C++ ISO 草案 2020,文档编号 4849 中搜索术语“成员子对象”返回 7 个结果。所有这些都转录如下;
(6.7.2 对象模型):
对象可以包含其他对象,称为子对象。子对象可以是成员子对象(11.4)、基类子对象 (11.7) 或数组元素。不是任何其他对象的子对象的对象称为完整对象。如果在与成员子对象或数组元素 e关联的存储中创建对象(可能在也可能不在其生命周期内),则创建的对象是 e 的包含对象的子对象,如果:...
(6.7.3 终身)
[注意:11.10.2 描述了基础子对象和成员子对象的生命周期。——尾注]
(9.9 using 声明)
[注意:因为 using-declarator 指定基类成员(而不是成员子对象或基类子对象的成员函数),所以 using-declarator 不能用于解决继承的成员歧义
(11.4 班级成员)
[注意:非引用类型的非静态数据成员是类对象(6.7.2)的成员子对象。——尾注]
(11.8 成员名称查找)
[注意:即使一个对象有多个类型为 T 的基类子对象,也可以明确地找到在基类 T 中定义的静态成员、嵌套类型或枚举数。两个基类子对象共享 T 的非静态成员子对象它们共同的虚拟基类。——尾注]
(11.10.2 初始化基和成员)
注意:声明顺序必须确保基子对象和成员子对象以与初始化相反的顺序被销毁。——尾注]
对我来说,似乎没有一个是这个词的定义。上面的 Class Member 声明说了一些有趣的事情,但它没有说“只有非引用类型的非静态数据成员才是成员子对象”。那么什么是成员子对象?
解决方案
这是一个例子
struct A {
};
struct B {
A a;
}
int main()
{
A x;
B y;
}
在这种情况下x
,是 type 的“完整对象” A
,而 whiley.a
也是 type的,它是typeA
对象的“成员子对象” 。y
B
推荐阅读
- javascript - 如何在spring java应用程序中访问angular js $rootscope
- java - 为什么使用 Image.IO malloc 的代码占用了这么多内存
- sql - 从存储过程更新表
- c# - Asp.Net WebForms .Net Fwk 4.6.1:找不到 System.Web.Helpers.AntiForgery 库
- ios - 状态恢复期间的 UIAppearance 错误
- opencv - 3D 对象变换以匹配位置
- regex - 跨双换行符的正则表达式
- javascript - 反应从 url 加载 svg 图像
- angular - Angular ng build --prod 错误:类型不可分配且属性不存在
- dart - 飞镖 DivElement