首页 > 解决方案 > 什么是成员子对象?

问题描述

在 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 声明说了一些有趣的事情,但它没有说“只有非引用类型的非静态数据成员才是成员子对象”。那么什么是成员子对象?

标签: c++objectlanguage-lawyer

解决方案


这是一个例子

struct A {
};

struct B {
    A a;
}

int main()
{
    A x;
    B y;
}

在这种情况下x,是 type 的“完整对象” A,而 whiley.a也是 type的,它是typeA对象的“成员子对象” 。yB


推荐阅读