相比较于C语言风格引入了一些静态的约束,比如检查const属性和voliate属性 constintg=20;int*h=static_cast<int*>(&g); 上边示例的转换会导致编译错误,因为非const指针h想要指向一个常量。 对于多态的场景,向上转换(up cast,从派生类转换到基类,指针或者引用)、向下转换(down cast,基类转换成派生类,指针或者引用)...
const_cast实现原因就在于C++对于指针的转换是任意的,它不会检查类型,任何指针之间都可以进行互相转换,因此const_cast就可以直接使用显示转换(int*)来代替: constintconstant =21;constint* const_p = &constant;int* modifier = (int*)(const_p); 或 constintconstant =21;int* modifier = (int*)(&constant...
1inta =10;2void* p = reinterpret_cast<void*>(&a);//int指针转为void指针 4. const_cast const_cast用于去除变量的常量属性,它只能用于指针或引用。使用时需要注意,修改一个本来就是常量的变量会导致未定义的行为。 使用场景:主要用于去除指针或引用的常量属性,以便进行修改。 例: constinta =10;int* p...
const_cast<type_id>(expression) 用来修改类型的const或volatile属性。 常量指针被转化成非常量指针,并且仍然指向原来的对象; 常量引用被转换成非常量引用,并且仍然指向原来的对象;常量对象被转换成非常量对象。 include<iostream> using namespace std; int main() { const int a = 10; const int * p = &a...
(2)用于基本数据类型之间的转换,如把int转换成char。这种转换的安全也要开发人员来保证 (3)把空指针转换成目标类型的空指针 (4)把任何类型的表达式转换为void类型 注意:static_cast不能转换掉expression的const、volitale或者__unaligned属性。主要用于基本类型之间、有继承关系的类对象之间、类指针之间的转换,不能用...
intnum=42;char*charPtr=reinterpret_cast<char*>(&num);// 将整数指针转换为字符指针 const_cast: 用于去除表达式的常量性(constness),可用于添加或删除const或volatile修饰符。 主要用于指针、引用和对象上。 constintconstantNum=5;int*mutableNum=const_cast<int*>(&constantNum);// 去除常量性*mutableNum=...
此处将 const char* 类型变量 转为 char* 类型的变量 , 可以理解成将常量转为变量 , 这里也可以将变量转为常量 ; II . static_cast 转换操作符 1. static_cast 转换操作符 : 有以下作用 ; ① 基础类型转换 : int 与 float 之间进行转换 等 ; ...
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*...
首先,static_cast用于低风险的转换,只在编译期间进行,如将double转换为int,除非是危险的跨类型转换,否则通常不会出现问题。它不能去除表达式中的const或volatile修饰,且转换失败会引发编译错误。const_cast则用于去除const或volatile修饰,如将const int*转换为int*,允许修改常量值,但需谨慎使用,因为...
intn=static_cast<int>(scores); static_cast 关键字 static_cast 只能用于良性转换,这样的转换风险较低,一般不会发生什么意外,例如: 原有的自动类型转换,例如 short 转 int、int 转 double、const 转非 const、向上转型等; void 指...