C++中成员查找的过程是如何发生的?
How the process of member look up occurs in C++?
我使用的是文档编号 4901,C++ Draft ISO 2021,特别是 6.5.2(成员名称查找)。我无法理解术语“成员子对象”和“基础 class 子对象”的很多用法。我已经在 : What is a member sub object? 和
第二个问题的答案我比较满意,第一个虽然没有帮助到我。我认为草案中的解释有点太抽象了,所以我会依赖上面引用的术语的严格定义,但真的没有找到。走另一条路,成员名称查找在实践中是如何发生的?术语:member subobject 和 base class subobject 如何与成员名称查找相关?
从 ABI 的角度来看,B
和 C
在以下方面几乎没有区别:
struct A {
int x;
};
struct B : A {};
struct C {
A base;
};
创建 B
或 C
类型的对象都需要创建 A
类型的对象。在这两种情况下,A
的实例都属于 父对象。所以在这两种情况下它们都是子对象.
对于类型 B
的对象,A
对象是一个 base class 子对象 .
对于类型 C
的对象,A
对象是一个 成员子对象 。
编辑:整合评论中后续问题的内容。
struct D : A {
A base;
};
在D
的例子中,D
的每个实例中都有2个A
类型的子对象。一个基础class子对象和一个成员子对象.
我使用的是文档编号 4901,C++ Draft ISO 2021,特别是 6.5.2(成员名称查找)。我无法理解术语“成员子对象”和“基础 class 子对象”的很多用法。我已经在 : What is a member sub object? 和
第二个问题的答案我比较满意,第一个虽然没有帮助到我。我认为草案中的解释有点太抽象了,所以我会依赖上面引用的术语的严格定义,但真的没有找到。走另一条路,成员名称查找在实践中是如何发生的?术语:member subobject 和 base class subobject 如何与成员名称查找相关?
从 ABI 的角度来看,B
和 C
在以下方面几乎没有区别:
struct A {
int x;
};
struct B : A {};
struct C {
A base;
};
创建 B
或 C
类型的对象都需要创建 A
类型的对象。在这两种情况下,A
的实例都属于 父对象。所以在这两种情况下它们都是子对象.
对于类型 B
的对象,A
对象是一个 base class 子对象 .
对于类型 C
的对象,A
对象是一个 成员子对象 。
编辑:整合评论中后续问题的内容。
struct D : A {
A base;
};
在D
的例子中,D
的每个实例中都有2个A
类型的子对象。一个基础class子对象和一个成员子对象.