失败时返回dynamic_cast的类型

时间:2014-03-18 21:14:22

标签: c++ c++11

失败后,dynamic_cast返回0作为NULL指针。从c ++ 11和nullptr开始,为什么仍然使用已弃用的宏?是否有计划合并nullptr或是否有使用新语法功能的dynamic_cast的替代方案?如果使用nullptr,是否会破坏旧代码?

编辑

正如评论中所指出的那样(并在答案中得到证实)

  

返回0作为NULL指针

是许多c ++书籍中的错误措辞(参见评论)。请参阅答案/评论,以解释dynamic_cast运营商失败后实际发生的情况

2 个答案:

答案 0 :(得分:9)

nullptrnullptr_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>