c++提供了四种新的cast机制,分别为static_cast, const_cast, dynamic_cast和reinterpret_cast。虽然也支持c中使用一对圆括号来cast,但是由于c++与c最大的区别是c++增加了类的概念,因此在子类与父类之间进行cast的时候,使用c的cast方式是无法保证其正确性的,因此c++提供了新的cast机制(虽然比较丑陋而且需要敲打更多的code,但是提供了安全性):dynamic_cast。
对指针进行dynamic_cast,失败返回null,成功返回正常cast后的对象指针;对引用进行dynamic_cast,失败抛出一个异常,成功返回正常cast后的对象引用。因此可以用来在运行期间进行类型判断。如下述演示代码。

class
CShape
...
{...}

class
CCircle:
public
CShape
...
{...}

class
CRectangle:
public
CShape
...
{...}

CShape
*
pShape;
...
//
do something
if
(dynamic_cast
<
CCircle
*
>
(pShape))

C++中的dynamic_cast用于在类继承体系中进行安全转换,它在运行时检查类型并确保转换正确。当对指针进行dynamic_cast时,失败返回nullptr,成功则返回转换后的指针。对于引用,失败会抛出异常,成功则返回转换后的引用。由于dynamic_cast依赖于RTTI(运行时类型信息),在某些编译器中需要启用此选项,否则可能会引发不可预知的行为。
最低0.47元/天 解锁文章
5163

被折叠的 条评论
为什么被折叠?



