constintg=20;int*h=static_cast<int*>(&g); 上边示例的转换会导致编译错误,因为非const指针h想要指向一个常量。 对于多态的场景,向上转换(up cast,从派生类转换到基类,指针或者引用)、向下转换(down cast,基类转换成派生类,指针或者引用)的情况如下 对于向上转换(up)是安全的 对于向下(down)转换总是成功的,...
static_cast:普通类型转换,如double转int、void*类型指针转换、有继承关系的指针之间的转换、non-const对象转const对象。【最经常使用】 dynamic_cast:在需要保证“安全的向下转型”的情况下使用,如当转型基类指针时,无法确定此基类指针指向的是否是子类对象。 所谓“安全的向下转型”即只有当Base class的指针确实指向De...
const_cast<type_id>(expression) 用来修改类型的const或volatile属性。 常量指针被转化成非常量指针,并且仍然指向原来的对象; 常量引用被转换成非常量引用,并且仍然指向原来的对象;常量对象被转换成非常量对象。 include<iostream> using namespace std; int main() { const int a = 10; const int * p = &a...
C++中有四种强制类型转换:static_cast、dynamic_cast、reinterpret_cast和const_cast。 它们之间的区别和适用场景分别如下: 1. static_cast static_cast用于基本数据类型之间以及具有继承关系的指针或引用之间的类型转换,还可以用于隐式类型转换(例如将float转换为int)。此外,它还可以用于将void指针转换为任意其他类型指针。
Derived* derived_ptr = dynamic_cast<Derived*>(base_ptr); 1. 2. 3. 4. 5. 6. 7. 3. const_cast: 用途:主要用于删除常量属性,即去除指针或引用的const或volatile修饰符。 限制:不能用于修改非指针或非引用类型的const属性。 示例: const int num = 10; ...
intnum=42;char*charPtr=reinterpret_cast<char*>(&num);// 将整数指针转换为字符指针 const_cast: 用于去除表达式的常量性(constness),可用于添加或删除const或volatile修饰符。 主要用于指针、引用和对象上。 constintconstantNum=5;int*mutableNum=const_cast<int*>(&constantNum);// 去除常量性*mutableNum=...
voidfoo(constint*cp){int*p=const_cast<int*>(cp);(*p)++;} 三. reinterpret_cast reinterpret_cast将一种类型的指针转换成另一种类型的指针,有很大的危险性和不确定性,一般只用于帮助一些非常底层的操作。看以下代码输出。 inti=2;float*p=reinterpret_cast<float*>(&i);//也可以用float *p = (float*...
此处将 const char* 类型变量 转为 char* 类型的变量 , 可以理解成将常量转为变量 , 这里也可以将变量转为常量 ; II . static_cast 转换操作符 1. static_cast 转换操作符 : 有以下作用 ; ① 基础类型转换 : int 与 float 之间进行转换 等 ; ...
const_cast的作用是用来改变表达式里面的常量性(const)或易变性(volatile)。 #include<iostream>usingstd::cout;usingstd::endl;intmain(void){constintb=10;//b = 11 报错,因为b是一个常量对象int*pc=const_cast<int*>(&b);*pc=11;cout<<"*pc = "<<*pc<<endl;//b原来地址的数据现在可由*pc来改...
C++中总共有四个强制类型转换操作符:reinterpert_cast、static_cast、const_cast、dynamic_cast。强制类型转换,也称为显式转换,接下来我们讲讲static_cast这个强制类型转换操作符。 编译器隐式执行的任何类型转换都可以由static_cast来完成,比如int与float、double与char、enum与int之间的转换等。