1.const_cast
1.1指针
const_cast用来去掉表达式const修饰或volatile修饰,也就是将const和volatile类型转换为非const和volatile类型。
这样用是未定义的行为,在调试的时候我们发现,p是改变了的,不同的编译器可能有不同的表现。也可以理解为常量优化行为,cout<<p<<endl;编译器可能会直接优化为cout<<6666<<endl;
1.2函数传参问题
构造函数参数列表参数类型都是变量,但是“小明”和“女”是const类型,所以需要用到强制类型转换转换。
1.3引用
2.static_cast
2.1用于基本数据类型转换
2.2用于void指针与具体类型指针之间的转换
2.3用于类层次上的转换
2.3.1进行上行转换(从子类到父类),安全
2.3.2进行下行转换(从父类到子类),不安全
注意:static_cast不能做带const类型的数据转换
3.dynamic_cast
3.1进行上下行转换
3.2交叉转换
若对指针进行dynamic_cast,失败返回NULL,成功返回正常cast后的对象指针。
若对引用进行dynamic_cast,失败抛出一个异常,成功返回正常cast后的对象引用。
注意:
1.dynamic_cast在将父类cast到子类时,父类必须要有虚函数,否则编译器会报错
2.dynamic_cast用于上下行转换,以及交叉转换。