![]() |
1
4
是错误的当
通过尝试以下操作,您将注意到错误的原因:
你会注意到
|
![]() |
2
2
当你转换
但是当你转换
你的非工作尝试都相当于
C样式的cast的行为类似于
守则
到达
|
![]() |
3
2
停止使用C样式的转换这行代码没有任何合理之处;它重新解释了
但是GME和PCH子对象的地址是 不 同样,你得到的指针也是垃圾。然后其他一切都失败了。
这行也可以写成
这个
在某些情况下,重新解释cast(或通过void错误地跳闸)是可行的;但是它们是脆弱的,并且涉及到标准中相对深奥的文本。 只需始终将void ptr返回到其原始类型,而不要重新解释其他类型的cast或C风格的cast指针。 |
![]() |
4
1
当使用继承时,指针值需要从指向派生类的指针调整为指向基类的潜在不同指针,即使没有多重继承。例如,如果在派生类中添加虚拟方法,则指向基类的指针通常会根据指向vtable的指针的大小进行调整:
此外,在虚拟继承的情况下,不可能找到正确的指针调整,因此基类指针的实际值显式存储在每个派生类实例中。 |