虚拟继承成员查找
virtual inheritance member lookup
我有以下继承的虚拟类的代码,不知何故inh::P1
被编译为char
。谁能解释为什么编译器在这个例子中选择char
而不是int
作为inh::P1
?谢谢!
#include <iostream>
class myClass {public: typedef int P1;};
class myClassdef : virtual public myClass {};
class myClass2 : virtual public myClass { public: typedef char P1;};
class inh : public myClassdef, public myClass2 {};
int main()
{
std::cout << sizeof(inh::P1) << std::endl;
return 0;
}
sizeof(inh::P1);
查找从最直接的级别向上发生,因此inh::P1
是指通过myClass2
继承的P1
,它确实属于类型,char
。如果需要引用最顶层基类中的成员,请使用:
sizeof(myClass::P1);
请注意:
inh::P1 ---> Refers to immediate base member, i.e: myClass2::P1
myClass2::P1 ---> Refers to member in current class scope, i.e: myClass2::P1
myClassdef::P1 ---> Refers to immediate base member, i.e: myClass::P1
myClass::P1 ---> Refers to member in current class scope, i.e: myClass::P1
基本上在多重继承中,查找是在最接近的级别完成的,因此当您调用 inh::P 1 时,会调用 myClass2 的 P1。因此,如果您想引用 myClass,请显式调用它,如下所示:
sizeof(myClass::P1);
相关文章:
- 不明确的成员模板查找
- enable_if继承的成员函数的名称查找错误
- 如何处理具有不同类的成员函数的函数查找表?
- C++中成员名称查找和访问声明中的歧义
- 如何通过也在向量中的指针查找作为类成员的向量的大小
- 算法在容器中查找具有给定值的元素之一的成员
- 如何使用 Clang 查找所有成员字段读/写?
- 如何查找一组类型对是否包含一个元素作为第二个成员
- 如何在具有多个成员的自定义对象的向量上使用查找
- 在C++中查找紧密成员函数名称
- 类(模板)成员函数体内部的ADL查找
- 动态链接到 c++ 静态成员字段时符号查找失败
- C++ 在向量中查找对象并在其上调用成员函数
- 查找初始化列表中的哪个成员抛出了例外
- 如何使用模板专业化来查找成员函数参数类型等
- 如何"reset" std::string的查找成员函数,一旦它到达字符串的末尾
- 设置查找成员与在列表中使用查找
- vector中没有查找成员
- Jsoncpp查找成员函数
- (C++Boost)在列表中查找成员与搜索词匹配的项目