static_cast
reinterpret_cast
const_cast
dynamic_cast
1. const_cast
1.去掉const属性
const int a = 10;
int &pa = const_cast<int &>(a);
pa = 100;
2.去掉volatile属性
volatile int a = 10;
int &pa = const_cast<int &>(a);
pa = 100;
2. static_cast
类似C风格的强制转换,进行无条件转换,静态类型转换:
1)基类和子类之间的转换:其中子类指针转换为父类指针是安全的,但父类指针转换为子类指针是不安全的(基类和子类之间的动态类型转换建议用dynamic_cast)。
2.基本数据类型转换,enum,struct,int,char,float等。static_cast不能进行无关类型(如非基类和子类)指针之间的转换。
double a = 9.9;
int b = static_cast<int>(a); // 正确, 将double转换为int
int a = 78;
const int b = static_cast<const int>(a); // 正确, 将int转换为const int
3.把任何类型的表达式转换成void类