我正在使用文档号 4901,C++ Draft ISO 2021,特别是 6.5.2(成员名称查找)。我无法理解术语“成员子对象”和“基类子对象”的很多用法。我已经在:What is a member sub object? 中询问过这些术语。和 What is a base class subobject
第二个问题的答案对我来说比较满意,但第一个问题对我没有帮助。我觉得草案中的解释有点太抽象了,所以我会依赖上面引用的术语的严格定义,但确实没有找到任何定义。另辟蹊径,成员姓名查找在实践中是如何发生的?术语:成员子对象和基类子对象与成员名称查找有何关系?
最佳答案
从 ABI 的角度来看,B
和 C
在以下方面几乎没有区别:
struct A {
int x;
};
struct B : A {};
struct C {
A base;
};
创建B
类型的对象或C
类型的对象都需要创建A
类型的对象。在这两种情况下,A
的实例都属于父对象。因此,在这两种情况下,它们都是子对象。
对于 B
类型的对象,A
对象是基类子对象。
对于C
类型的对象,A
对象是一个成员子对象。
编辑:整合评论中后续问题的内容。
struct D : A {
A base;
};
在 D
的例子中,D
的每个实例中有 2 个 A
类型的子对象。一个基类子对象和一个成员子对象。
关于c++ - C++中成员查找的过程是如何发生的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69756347/