所以,当我们用static_cast将父类指针转换成子类指针时,编译器不报错。而dynamic_cast是在运行时执行类型转换,用于将基类的指针安全地转换成派生类的指针,也就是说,dynamic_cast会进行动态类型检查。dynamic_cast相当于给程序员提供了一种安全的机制,让程序员能够安全地使用父类指针的动态类型。 下面举一个使用dynamic...
dynamic_cast< type_id >(expression) type_id 必须是类的指针、类的引用或者void*。 主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。 dynamic_cast只能用于含有虚函数的类; 进行上行转换的时候,与static_cast 的作用一样。下行转换的时候,具有类型检查的功能,比static_cast更安全。 dynamic_c...
static_cast和dynamic_cast都是C++中的类型转换操作符,但它们有着不同的用途和限制: static_cast:静态类型转换 static_cast进行的是编译时的类型转换,只能用于已知的类型之间的转换,且不能转换掉const、volatile等属性。主要用于基本数据类型的转换、隐式转换的显式化和向上转型(子类指针或引用转为父类指针或引用)。
1. static_cast static_cast是静态类型转换,“静态”一词是指在程序编译期间完成类型的转换,这应该是平时使用最多的类型转换。例如,将一个浮点数转化为整数,就可以使用static_cast: 复制代码 floata =10.5;intb =static_cast<int>(a); 2. dynamic_cast dynamic_cast是动态类型转换,“动态”一词是指在程序运...
int b = static_cast<int>(a); 1. char c = static_cast<char>(b); 1. type = static_cast<test_enum>(b); 1. char* pa = NULL; 1. int *pb = (int*)pa; 1. //int *pb = static_cast<int*>(pa); //error 1. //pa = static_cast<char*>(pb) //error ...
1 static_cast 用法:static_cast < type-id > ( exdivssion ) 该运算符把exdivssion转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法: ①用于类层次结构中基类和子类之间指针或引用的转换。 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; ...
static_cast和 reinterpret_cast的几种使用场景 2. reinterpret_cast<void *>()重新解释转换 A:指针与整数之间的转换: B:指针之间的转换 C:不相关类型的指针之间的转换 D:函数指针之间的转换: 3. const_cast 常量转换 4. dynamic_cast 动态转换 5. 重点-深入理解下reinterpret_cast的转换原理? 在C++编程中,...
type a = static_cast<type>(variant); 该运算符把variant转换为type类型,但没有运行时类型检查来保证转换的安全性。 它主要有如下几种用法: 1.类层次结构中基类和子类之间指针或引用的转换。 子类转基类:把子类的指针或引用转换成基类表示,是安全的; ...
将int(4字节)显示转换成short(2字节),用vs调试一下,发现static_cast的作用就是将高位截断。 再举一个例子,讲short显示转换成int,结果如下图所示。 short是2个字节,int是4个字节,将short转换成int之后,高位根据符号位补满。 so,小结一下static_cast: ...
static_cast可以视为C语言强制类型转换的替代品。6.4、reinterpret_cast用于将一种类型转换为另一种不同的类型。它可以将整型转换为指针,或将指针转换为整型。然而,这种转换是危险的,因为它会改变数据的解释方式,可能导致未定义行为。因此,通常不建议使用reinterpret_cast。