比如:下面代码第五行会报错,“static_cast”: 无法从“float *”转换为“int *” 2,const_cast 用法:const_cast<type-id> (expression) 该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。 常量指针被转化成非常量指针,并且仍然指向原来的对象; 常量...
static_cast:普通类型转换,如double转int、void*类型指针转换、有继承关系的指针之间的转换、non-const对象转const对象。【最经常使用】 dynamic_cast:在需要保证“安全的向下转型”的情况下使用,如当转型基类指针时,无法确定此基类指针指向的是否是子类对象。 所谓“安全的向下转型”即只有当Base class的指针确实指向De...
constintg=20;int*h=static_cast<int*>(&g); 上边示例的转换会导致编译错误,因为非const指针h想要指向一个常量。 对于多态的场景,向上转换(up cast,从派生类转换到基类,指针或者引用)、向下转换(down cast,基类转换成派生类,指针或者引用)的情况如下 对于向上转换(up)是安全的 对于向下(down)转换总是成功的,...
1、_static_cast(静态类型转换,int 转换为char) 格式:TYPE B = static_cast<TYPE>(a) reinterpreter_cast(重新解释类型):专门用于指针类型的转换。 voidmain() {doubledpi =3.1415;//int num1 = dpi;//默认自动类型转换,会提示 warningintnum2 = static_cast<int>(dpi);//静态类型转换,在编译时会做类...
const int *pai =&ai; int *p2 =const_cast(int *)(pai); d) reinterpret_cast 编译的时候就会进行类型的检查,将操作数内容解释为另一种不同的类型, 处理无关类型的转换,可以随意转,被认为是危险的类型转换, 常用于如下两种转换: 1)将一个整型转换成指针,一个类型的指针转换成另一个类型的指针,转换后...
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*...
chara;intn=(int)a; type-id(expression)//转换格式2 chara;intn=int(a); static_cast static_cast相当于传统的C语言里的强制转换,该运算符把expression转换为new_type类型,用来强迫隐式转换,例如non-const对象转为const对象,编译时检查,用于非多态的转换,可以转换指针及其他,但没有运行时类型检查来保证转换的...
intnum=42;char*charPtr=reinterpret_cast<char*>(&num);// 将整数指针转换为字符指针 const_cast: 用于去除表达式的常量性(constness),可用于添加或删除const或volatile修饰符。 主要用于指针、引用和对象上。 constintconstantNum=5;int*mutableNum=const_cast<int*>(&constantNum);// 去除常量性*mutableNum=...
static_cast 关键字 static_cast 只能用于良性转换,这样的转换风险较低,一般不会发生什么意外,例如: 原有的自动类型转换,例如 short 转 int、int 转 double、const 转非 const、向上转型等; void 指针和具体类型指针之间的转换,例如void...
const int j = 99; int * k; k = const_cast<int *>(&j);//解除const return 0; } 3、reinterpret_cast运算符 reinterpret_cast运算符用来将一个类型指针转变为另一种类型的指针,也用在将整开型量转为指针,或将指针转为整型量上; int main() ...