假设我有类层次结构:
class Base{
}
class Derived : public Base{
}
假设我想检查某个对象是否为Derived类型:
Base* b = new Base();
Derived* d = dynamic_cast<Derived*>(b);
if(b!=nullptr){ //Should this check be for 0, NULL or nullptr ?
// b is not Derived
}
我应该在C ++ 11中测试0,NULL还是nullptr?
找到答案:(抱歉,我通过谷歌搜索时没有显示) In c++11, does dynamic_cast return nullptr or 0?
答案 0 :(得分:3)
“失败的[动态]强制转换为指针类型的值是所需结果类型的空指针值。
无论如何,使用nullptr
以便与读者清楚地沟通代码是个好主意。
请注意,引用类型失败的dynamic_cast
会引发异常,因为不存在空引用。
为了检查静态已知的多态类型o
的对象Base
是否真的是Derived
,您可以直接在dynamic_cast
中使用if
条件 - 没有必要明确地将它与任何东西进行比较:
if( auto pd = dynamic_cast<Derived*>( &o ) )
{
// Use pd here
}