D *pd2 =dynamic_cast(pb); //pd2 is NULL delete pb; } 在函数foo中,使用static_cast进行转换是不被允许的,将在编译时出错;而使用dynamic_cast的转换则是允许的,结果是空指针。 3.3 reinpreter_cast 用法:reinpreter_cast (expression) type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。 它可...
2. dynamic_cast 3. const_cast 4. reinterpret_cast 5. 为什么要需要四种类型转换? 1. static_cast 实现C++种内置基本数据类型之间的相互转换,不能用于两个不相关类型进行转换。 例如:将整形数据转换为浮点型 c语言方式 int a = 8; int b = 3; double result = (double)a / (double)b; 1. 2. 3....
所以,当我们用static_cast将父类指针转换成子类指针时,编译器不报错。而dynamic_cast是在运行时执行类型转换,用于将基类的指针安全地转换成派生类的指针,也就是说,dynamic_cast会进行动态类型检查。dynamic_cast相当于给程序员提供了一种安全的机制,让程序员能够安全地使用父类指针的动态类型。 下面举一个使用dynamic...
dynamic_cast是四个强制类型转换操作符中最特殊的一个,它支持运行时识别指针或引用。 首先,dynamic_cast依赖于RTTI信息,其次,在转换时,dynamic_cast会检查转换的source对象是否真的可以转换成target类型, 这种检查不是语法上的,而是真实情况的检查。 若对指针进行dynamic_cast,失败返回nullptr,成功返回正常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(pb);
static_cast和dynamic_cast都是C++中的类型转换操作符,但它们有着不同的用途和限制: static_cast:静态类型转换 static_cast进行的是编译时的类型转换,只能用于已知的类型之间的转换,且不能转换掉const、volatile等属性。主要用于基本数据类型的转换、隐式转换的显式化和向上转型(子类指针或引用转为父类指针或引用)。
dynamic_cast也可以对指针进行一些其他的隐式类型转换所支持的转换:比如将空指针转化为其他类型(即使是在不相关的类型之间转换也可以),也能将任何类型的指针转换为void*类型。 译者补充1:dynamic_cast 处理空指针、void* classA{virtualvoidfoo(){}};classB:publicA{voidfoo()override{}};classC{};intmain(){...
//隐式的类型转换intfirstnumber=10;doubleresult=(double)firstnumber/secondnumber;//使用static_dynamicdoubleresult=static_cast<double>(firstnumber/secondnumber); 举个例子: 将int(4字节)显示转换成short(2字节),用vs调试一下,发现static_cast的作用就是将高位截断。
C++引入了static_cast、dynamic_cast、const_cast和reinterpret_cast这4种类型转换操作符,提供了更安全、...
对于上行转换,dynamic_cast和static_cast是一样的。 对于下行转换,说到下行转换,有一点需要了解的是在C++中,一般是可以用父类指针指向一个子类对象,如parent* P1 = new Children(); 但这个指针只能访问父类定义的数据成员和函数,这是C++中的静态联翩,但一般不定义指向父类对象的子类类型指针,如Children* P1 = ...