static_cast
静态转换
int i = static_cast<int> 100.0;
dynamic_cast
动态转换
涉及到面向对象的多态性,应用于运行时类型识别与检查。将一种类型的指针转换为另一种类型的指针,主要用来父类型和子类型之间的转换。
const_cast
脱常,只能用于指针和引用。
去除指针或引用的const属性(编译时进行类型转换), 不能进行不同类型之间的转换。
父类A 子类B
B *b1 = new B();
A *a1 = dynamic_cast<A*>(p1); // ok
A *a1 = b; // ok
//B *b2 = (B*)a1; //error: cannot cast 'A *' to 'B *' via virtual base 'A'
// 无法由父类指针到子类指针的转换
B *b3 = dynamic_cast<People*>(a1);// ok
reinterpret_cast
无隐式转换
void func(int & v) {}
void main()
{
int *p; void *q;
q = p;
//void * = int * //void *可以存储任何类型
//p = q;
//int * = void * //g++编译不过
q = static_cast<int *>(p);
char *x; int *y;
//x=y; y=x; //g++编译不过,不同类型指针之间需转换
x = reinterpret_cast<char*>(y);
const int a = 19; //必须初始化
//func(a); //g++编译不过, 需去除const属性
func(const_cast<int&>(a));
}