sha*_*oth 5 c++ inheritance portability pointers casting
假设我有:
class Base {
public:
virtual void Nothing() {}
};
class MiddleDerived : public Base {
virtual void Nothing() {}
};
class Derived : public MiddleDerived {
virtual void Nothing() {}
};
Run Code Online (Sandbox Code Playgroud)
我的代码是这样的:
Derived* object = new Derived();
Base* base = object; //implicit conversion here
void* derivedVoid = object;
void* baseVoid = base;
Run Code Online (Sandbox Code Playgroud)
我应该期待baseVoid == derivedVoid吗?
我知道大多数实现都以这种方式工作但是有保证吗?
您“应该期望”的可能与保证的不同。
继承链的向上static_cast或向下可以更改地址。
在实践中发生这种情况的典型示例是基类是非多态的,而派生类引入了一些虚函数,许多编译器随后在每个派生对象的开头引入了一个 vtable 指针。