我不确定这是否是 Visual-C++ 编译器中的错误或未定义的行为。
struct DummyBase { virtual ~DummyBase() = default; };
struct DummyDerived : virtual public DummyBase {};
Run Code Online (Sandbox Code Playgroud)
只是一个类和一个使用虚拟继承的派生类
DummyDerived derived;
DummyBase* base = &derived;
std::cout << "Derived : " << &derived << std::endl;
std::cout << "Base : " << base << std::endl;
Run Code Online (Sandbox Code Playgroud)
当投射DummyDerived*到 DummyBase*指针时发生偏移。这似乎是由虚拟继承引起的:
Derived : 00000000002CF838
Base : 00000000002CF840
Run Code Online (Sandbox Code Playgroud)
即使指针值不同,比较也会返回 true:
std::cout << "IsSame : " << (base == &derived) << std::endl << std::endl;
Run Code Online (Sandbox Code Playgroud)
输出:
IsSame : 1
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都很好。
问题出现在以下设置中:
struct IBaseReturner
{ …Run Code Online (Sandbox Code Playgroud) c++ virtual-inheritance visual-c++ visual-studio-2013 covariant-return-types