假设我有:
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
吗?
我知道大多数实现都是这样工作的,但它有保证吗?
最佳答案
您“应该期待”的可能与保证的不同。
继承链上游或下游的 static_cast
可以更改地址。
实践中出现这种情况的典型示例是基类是非多态的,派生类引入了一些虚函数,许多编译器随后在每个派生对象的开头引入了一个 vtable 指针。
关于c++ - 我是否应该期望单继承中的向上转型和向下转型不调整指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34993934/