如果我们使用多重继承,切片将使父对象的地址与叶对象的地址不同:
struct X {int x};
struct Y {int y};
struct Z : X, Y {int z};
所以如果我们有一个Z
对象z
,它的地址&z
不会和它的Y
父地址重合:static_cast<Y*>(&z)
比 . 高四个字节&z
。
好处static_cast
是它是静态的,所以不占用运行时间(与 相比dynamic_cast
)。但是,如果我们有一个Z*
指向 的0
,那么每个对父级的强制转换也应该并且确实会产生一个空指针。为什么这个工作以及它是如何实施的?这是否意味着每一个都static_cast
引入了一个分支指令?