C++中member subobject(成员子对象)的明确定义是什么?
C++
member subobject(成员子对象)的明确定义 C标准没有为该术语单独设立成文定义条目,但可以从N4849(C20草案)的关联条文中拼接出准确、无歧义的定义:
member subobject(成员子对象)属于三类标准子对象的一种,特指类类型实例所包含的、对应类中非引用类型非静态数据成员的子对象。
定义的条文佐证
所有依据均来自公开的N4849草案内容:
6.7.2 对象模型条文:对象可以包含其他对象,这类对象称为子对象(subobject)。子对象可以是member subobject(参见11.4节)、基类子对象(base class subobject,参见11.7节)或者数组元素。
11.4 类成员注释:非引用类型的非静态数据成员是类对象的member subobject(参见6.7.2节)。
边界排除规则
符合以下任一特征的类成员都不属于成员子对象:
- 静态数据成员:不属于类实例的存储组成部分,不是类实例的子对象
- 静态/非静态成员函数:成员函数不是存储在实例中的数据对象,不满足子对象的基础定义
- 非静态引用类型成员:C++标准中引用本身不是对象,不可能成为子对象
关联特性
从配套条文可整理出成员子对象的核心特性:
- 生命周期与所属类实例绑定,按声明顺序初始化,逆序销毁,规则与基类子对象一致
- 虚继承场景下,多个派生类子对象共享公共虚基类的非静态成员子对象
- using声明指代基类成员本身而非成员子对象,因此无法通过using声明解决继承成员的歧义问题
内容的提问来源于stack exchange,提问作者user15071942
相关产品推荐
相关产品推荐

