c++中何时会用到 RTTl-dynamic_cast
时间: 2024-02-05 21:48:10 浏览: 34
在C++中,当需要在运行时将一个指向基类的指针转换为指向派生类的指针时,就会用到RTTI中的dynamic_cast。它的语法如下:
Superb *pm = dynamic_cast<Superb *>(pg);
其中,pg是指向基类对象的指针。如果转换成功,dynamic_cast将生成一个指向派生类的指针;如果转换失败,即无法将指向基类的指针转换为指向派生类的指针,dynamic_cast将返回0,即空指针。
此外,dynamic_cast也可以用于引用类型。与指针不同的是,当转换请求不正确时,dynamic_cast将引发一个类型为bad_cast的异常。这种异常是从exception类派生而来的,它是在头文件typeinfo中定义的。因此,在使用dynamic_cast进行引用类型转换时,可以使用try-catch语句来处理可能引发的异常,例如下面的代码片段:
try {
Superb &rs = dynamic_cast<Superb &>(rg);
} catch(bad_cast &) {
// 引发类型转换异常的处理代码
}
因此,在C++中,当我们需要在运行时进行指针或引用类型的基类和派生类之间的转换时,可以使用RTTI中的dynamic_cast来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [P39-第15章友元、异常和其他-04RTTI,运行阶段类型识别和dynamic_cast](https://blog.csdn.net/sgy1993/article/details/114402030)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)