两个dynamic_cast都是下行转换,第一个转换是安全的,因为指向对象的本质是子类,转换的结果使子类指针指向子类,天经地义;第二个转换是不安全的,因为指向对象的本质是父类,“指鹿为马”或指向不存在的空间很可能发生! 另外,dynamic_cast还支持交叉转换(cross cast)。如下代码所示。 1 2 3 4 5 6 7 8 9 10 ...
最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。 static_cast 用法:static_cast< type-id > ( expression ) 说明:该运算符把expression转...
最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。 static_cast 用法:static_cast< type-id > ( expression ) 说明:该运算符把expression转...
cast:转换 reinterpret_cast是 C++ 中的一个类型转换运算符,它用于执行低级别的、不安全的类型转换。与其他类型转换运算符(如static_cast、dynamic_cast和const_cast)相比,reinterpret_cast提供了最少的类型检查。它基本上可以将任何指针类型转换为任何其他指针类型,甚至可以将指针转换为足够大的整数类型,反之亦然。
dynamic_cast <new_type> (expression) reinterpret_cast <new_type> (expression) const_cast <new_type> (expression) 1. 2. 3. 4. 可以提升转换的安全性。 static_cast (expression) 静态转换 静态转换是最接近于C风格转换,很多时候都需要程序员自身去判断转换是否安全。比如: ...
在标准C++中有四个类型转换符:static_cast、dynamic_cast、const_cast和reinterpret_cast;下面将对它们一一的进行总结。 1. static_cast static_cast的转换格式:static_cast <type-id> (expression) 将expression转换为type-id类型,主要用于非多态类型之间的转换,不提供运行时的检查来确保转换的安全性。主要在以下几...
注意:static_cast不能转换掉expression的const、volitale、或者__unaligned属性。 3.2 dynamic_cast 用法:dynamic_cast < type-id > ( expression ) 说明:该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void *;如果type-id是类指针类型,那么expression也必须是一个指针,如果type...
使用标准C++的类型转换符,主要有四种类型:static_cast、dynamic_cast、reinterdivt_cast、const_cast 1 static_cast 用法:static_cast < type-id > ( exdivssion ) 该运算符把exdivssion转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法: ...
在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。 class B{ public: int m_iNum; virtual void foo(); }; class D:public B{ public: char *m_szName[100]; }; void func(B *pb){ D *pd1 = static_cast...
C++引入了四种功能不同的强制类型转换运算符以进行强制类型转换:static_cast、reinterpret_cast、const_cast和dynamic_cast。 强制类型转换是有一定风险的,有的转换并不一定安全,例如把int整形数值转换成一个指针类型,把基类指针转换成派生类指针的时候有可能会失败,把一种函数指针转换成另一种函数指针...