1. static_cast: 普通内置数据类型之间转化,具有继承关系之间的指针或者引用之间的转化
class Building{};
class Animal{};
class Cat:public Animal{};
int a = 97;
char c = static_cast<char>(a);
cout << c << endl;
Cat* pCat2=NULL;
Animal*pAnima2 = static_cast<Animal*>(pCat2);
Animal* pAnimal3 = NULL;
Cat* pCat3 = static_cast<Cat*>(pAnimal3);
Cat cat4;
Cat& yCat4 = cat4;
Animal& yAnimal4 = static_cast<Animal&> (yCat4);
Animal animal5;
Animal& yanimal5 = animal5;
Cat& ycat5 = static_cast<Cat&> (yanimal5);
2. dynamic_cast : 具有继承关系的指针或者引用之间的转化,并且进行严格的检查,只能从子转父。
class Building{};
class Animal{};
class Cat:public Animal{};
Cat cat4;
Cat& yCat4 = cat4;
Animal& yAnimal4 = dynamic_cast<Animal&> (yCat4);
Cat* pCat2 = NULL;
Animal*pAnima2 = dynamic_cast<Animal*>(pCat2);
3. const_cast: 增加或去除变量的 const 性
int a = 10;
const int &b= a;
情况(1)
int &c=b;
情况(2)
int &c=const_cast<int &>(b);
c = 11;
const int* p1 = NULL;
int *p2 = p1; (无效),
int*p3= const_cast<int*>(p1);
int* p1 = NULL;
const int *p2 = const_cast<const int*>(p1);
4. reinterpret_cast: 任何指针类型之间的转化(包括函数指针)
class Building{};
class Animal{};
class Cat:public Animal{};
Building* B1;
Animal* A1;
A1 = reinterpret_cast<Animal*>(B1);
typedef void (FUNC1)(int, int);
typedef void (FUNC2)(int, char);
FUNC1* pfun1=NULL;
FUNC2* pfun2 = reinterpret_cast<FUNC2* >(pfun1);