We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
1.用途:将基类的指针或引用安全地转换成派生类的指针或引用。 使用条件:dynamic_cast用于某种类型的指针或引用时,只有该类型含有虚函数时,才能进行这种转换。
2.格式 dynamic_cast<type*>(p) //e是指针
dynamic_cast<type&>(p) //e是左值
dynamic_cast<type&&>(p)//e是右值
3.指针类型的dynamic_cast
若dynamic_cast语句的转换目标是指针类型并且转换失败了,会返回一个空指针,则判断条件为0,即为false;如果转换成功,指针为非空,则判断条件为非零,即true。
可使用形如
if(Derived*pd=dynamic_cast<Derived*>(pb))
的语句,使类型转换和条件检查在同一条表达式中完成
此外也可以,对一个空指针执行dynamic_cast,结果是所需类型的空指针。
4、引用类型的dynamic_cast
引用类型的dynamic_cast和指针类型的dynamic_cast在表示错误发生的方式上略有不同。因为不存在空引用,所以对于引用类型来说无法使用与指针类型完全相同的错误报告策略。当对引用类型转换失败时,程序抛出一个名为std::bad_cast的异常,该异常定义在typeinfo标准库头文件中。
可使用如下try方法处理类型转换失败的情况
void f(const Base &b) { try { const Derived &d=dynamic_cast<Derived&>(b); } catch(bad_cast) { //处理代码 } }
The text was updated successfully, but these errors were encountered:
No branches or pull requests
1.用途:将基类的指针或引用安全地转换成派生类的指针或引用。
使用条件:dynamic_cast用于某种类型的指针或引用时,只有该类型含有虚函数时,才能进行这种转换。
2.格式
dynamic_cast<type*>(p) //e是指针
dynamic_cast<type&>(p) //e是左值
dynamic_cast<type&&>(p)//e是右值
3.指针类型的dynamic_cast
若dynamic_cast语句的转换目标是指针类型并且转换失败了,会返回一个空指针,则判断条件为0,即为false;如果转换成功,指针为非空,则判断条件为非零,即true。
可使用形如
的语句,使类型转换和条件检查在同一条表达式中完成
此外也可以,对一个空指针执行dynamic_cast,结果是所需类型的空指针。
4、引用类型的dynamic_cast
引用类型的dynamic_cast和指针类型的dynamic_cast在表示错误发生的方式上略有不同。因为不存在空引用,所以对于引用类型来说无法使用与指针类型完全相同的错误报告策略。当对引用类型转换失败时,程序抛出一个名为std::bad_cast的异常,该异常定义在typeinfo标准库头文件中。
可使用如下try方法处理类型转换失败的情况
The text was updated successfully, but these errors were encountered: