Skip to content
New issue

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

简单的dynamic_cast使用总结 #88

Open
nuc-fusion opened this issue Jun 16, 2022 · 0 comments
Open

简单的dynamic_cast使用总结 #88

nuc-fusion opened this issue Jun 16, 2022 · 0 comments

Comments

@nuc-fusion
Copy link

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)
    {
    //处理代码
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant