假设我有:
class Base {
public:
virtual void Nothing() {}
};
class MiddleDerived : public Base {
virtual void Nothing() {}
};
class Derived : public MiddleDerived {
virtual void Nothing() {}
};
我的代码是这样的:
Derived* object = new Derived();
Base* base = object; //implicit conversion here
void* derivedVoid = object;
void* baseVoid = base;
我应该期待吗baseVoid == derivedVoid
?
我知道大多数实现都是这样工作的,但是它有保证吗?
您“应该期望”的可能与保证的不同。
A static_cast
沿着继承链向上或向下可以更改地址。
在实践中发生这种情况的典型示例是基类是非多态的,而派生类引入了一些虚函数,许多编译器随后在每个派生对象的开头引入了一个 vtable 指针。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)