C++ 类型转换

1.static_cast
static_cast 用于内置类型的数据类型
还有具有继承关系的指针或者引用
2.dynamic_cast
结论 dynamic 只能转换具有继承关系的指针或引用,并且
只能由子类型转换成基类型
3.const_cast
指针 引用或者对象指针
增加或者去除变量的 const 属性
4.reinterpret_cast
【C++ 类型转换】强制类型转换
无关的指针类型都可以进行转换

#include using namespace std; class Building{}; class Animal{}; class Cat:public Animal{}; //static_castvoid test01() { int a = 97; char c = static_cast(a); cout << c << endl; //基础数据类型指针 转换失败 //int* p = NULL; //char* sp = static_cast(p); //对象指针 转换失败 //Building* building = NULL; //Animal*animal = static_cast(building); //转换具有继承关系的对象指针 //父类指针转换成子类指针 Animal* ani = NULL; Cat* cat = static_cast(ani); //子类转换成父类 Cat* cat2 = NULL; Animal* mal = static_cast(cat2); Animal aniobj; Animal& aniref = aniobj; Cat& cat3 = static_cast(aniref); //结论 //static_cast 用于内置类型的数据类型 //还有具有继承关系的指针或者引用}// dynamic_cast转换具有继承关系的,在转换前会进行对象类型检查void test02() { //基础数据类型转换失败 //int a = 10; //char c = dynamic_cast(a); //非继承关系的指针转换失败 //Animal* ani = NULL; //Building* bul = dynamic_cast(ani); //具有继承关系的指针转换失败 //Animal* ani = NULL; //Cat* ca = dynamic_cast(ani); //原因在于 dynamic 做类型安全检查 Cat* cat = NULL; Animal* ani = dynamic_cast(cat); //结论 dynamic 只能转换具有继承关系的指针或引用,并且 //只能由子类型转换成基类型 } //const_cast 指针 引用或者对象指针void test03() { int a = 10; const int& b = a; //b = 20; 失败 int& c = const_cast(b); //c = 20; 可以 cout << a << endl; cout << b<< endl; cout << c << endl; //指针 const int* p = NULL; int* p2 = const_cast(p); int* p3 = NULL; const int* p4 = const_cast(p3); //增加或者去除变量的 const 属性}// reinterpret_cast 强制类型转换typedef void(*FUNC1)(int, int); typedef int(*FUNC2)(int, char*); void test04() { //1.无关的指针类型都可以进行转换 Building* buld2 = NULL; Animal* ani = reinterpret_cast(buld2); //2.函数指针转换 FUNC1 func1; FUNC2 func2 = reinterpret_cast(func1); }int main() { test01(); test03(); system("pause"); return 0; }


    推荐阅读