如果我们使用多重继承,切片将使父对象的地址与叶对象的地址不同:
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引入了一个分支指令?