简介: **c++**类型转换static_cast
,dynamic_cast
,const_cast
,reinterpret_cast
这四种类型转换的区别
[TOC]
本文初发于 “偕臧的小站“,同步转载于此。
思维导图:
static_cast:
静态类型转换:内置、自定义数据类型
//++++++++++++++++++++++++ //内置数据类型 char a = 'a'; double d = static_cast<double>(a) //++++++++++++++++++++++++ //自定义类型 Base* base = NULL; Son* son = NULL; //向下类型转换 不安全 Son* son = static_cast<Son*>(base); //向上类型转换 安全 Base* base = static_cast<Base*>(son);
static_cast:
动态类型转换:内置、自定义数据类型
//++++++++++++++++++++++++ //内置数据类型, 不可以转换 有精度损失的,都不可以转换 char c = 'c'; double d = dynamic_cast<double>(c) //++++++++++++++++++++++++ //自定义类型 Base* base = NULL; Son* son = NULL; //向下类型转换 不安全 失败 Son* son = dynamic_cast<Son*>(base); //向上类型转换 安全 成功 Base* base = dynamic_cast<Base*>(son);
const_cast:
常量转换:指针之间的转换
const int* p = NULL; //将const int * 转换为 int* int* p2 = const_cast<int*>(p); //将 p2 转换为const int* const int* p2 = const_cast<const int*>(p);
常量转换:引用之间的转换
const int a = 10; const int& aRef = a; int& aRef2 = const_cast<int&>(aRef); //不可以对 非指针 或者 非引用 做const_cast转换
reinterpret_cast:
重新解释转换 最不安全 不建议使用
//将base* 转换为 Other* Base* base = NULL; Other* other = reinterpret_cast<Other*>(base);