所以,当我们用static_cast将父类指针转换成子类指针时,编译器不报错。而dynamic_cast是在运行时执行类型转换,用于将基类的指针安全地转换成派生类的指针,也就是说,dynamic_cast会进行动态类型检查。dynamic_cast相当于给程序员提供了一种安全的机制,让程序员能够安全地使用父类指针的动态类型。 下面举一个使用dynamic...
1、static_cast 关键字 static_cast 只能用于良性转换,这样的转换风险较低,一般不会发生什么意外,例如: 原有的自动类型转换,例如 short 转 int、int 转 double、const 转非 const、向上转型等; void 指针和具体类型指针之间的转换,例如void *转int *、char *转void *等; 有转换构造函数或者类型转换函数的类与...
/*基本类型数据转换*/chara ='a';intb = static_cast<char>(a);//正确,将char型数据转换成int型数据double*c =newdouble;void*d = static_cast<void*>(c);//正确,将double指针转换成void指针inte =10;constintf = static_cast<constint>(e);//正确,将int型数据转换成const int型数据constintg =20...
1. static_cast<void*>()静态转换 static_cast和 reinterpret_cast的几种使用场景 2. reinterpret_cast<void *>()重新解释转换 A:指针与整数之间的转换: B:指针之间的转换 C:不相关类型的指针之间的转换 D:函数指针之间的转换: 3. const_cast 常量转换 4. dynamic_cast 动态转换 5. 重点-深入理解下reinter...
1 static_cast 用法:static_cast < type-id > ( exdivssion ) 该运算符把exdivssion转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法: ①用于类层次结构中基类和子类之间指针或引用的转换。 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; ...
c++类型转换static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较,显示转换,隐式转换,1.实现隐式类类型转换shorta=2000;intb;b=a;short是两字节,int是四字节,由short型转成int
1. static_cast 实现C++种内置基本数据类型之间的相互转换,不能用于两个不相关类型进行转换。 例如:将整形数据转换为浮点型 c语言方式 int a = 8; int b = 3; double result = (double)a / (double)b; 1. 2. 3. C++方式 int a = 8;
static_cast进行的是编译时的类型转换,仅适用于已知类型的转换,且不支持对const、volatile等属性的转换。主要用于基本数据类型转换,隐式转换的显式化以及向上转型,例如将整数转换为浮点数或子类指针转为父类指针。动态类型转换则由dynamic_cast实现,它在运行时执行,可在基类与派生类间进行转换,并能...
static_cast(见上文),然后const_cast reinterpret_cast reinterpret_cast,然后const_cast 因此,在某些情况下,它可以用作其他演员表的替代品,但由于能够演变为reinterpret_cast,因此可能非常危险,并且在需要显式转换时应首选后者,除非您确定static_cast会成功或reinterpret_cast会失败。即便如此,考虑更长、更明确的选项。
CDriver*pD=static_cast<CDriver*>(pB); } void main() { CBase*pBase= newCDriver; //call f f(pBase); } 1。dynamic_cast:运行时检查,用于多态的类型转换(upcast,downcast和crosscast),只能转换指针和引用。 2。static_cast:编译时检查,用于非多态的转换,可以转换指针及其他,比如:int->float还可以逆隐...