失败后,dynamic_cast
返回0作为NULL
指针。从c ++ 11和nullptr
开始,为什么仍然使用已弃用的宏?是否有计划合并nullptr
或是否有使用新语法功能的dynamic_cast
的替代方案?如果使用nullptr
,是否会破坏旧代码?
编辑
正如评论中所指出的那样(并在答案中得到证实)
返回0作为NULL指针
是许多c ++书籍中的错误措辞(参见评论)。请参阅答案/评论,以解释dynamic_cast
运营商失败后实际发生的情况
答案 0 :(得分:9)
nullptr
是nullptr_t
类型的prvalue文字。在dynamic_cast
可能返回空指针值(即而不是抛出std::bad_cast
)的情况下,它返回指针类型,而不是类型nullptr_t
。由于C ++是一种静态类型语言,dynamic_cast
无法在运行时更改其返回类型。
答案 1 :(得分:4)
也许一个例子会让它更清晰:
B * b = new B;
A * a = dynamic_cast<A *>(b);
dynamic_cast
的结果类型为A *
,没有任何内容可以改变。{/ p>