第十八章 类型转换
标准c++提供了一个显示的转换的语法,来代替旧的C风格的类型转换。使用C风格的强制转换可以把想要的任何东西转换成我们需要的类型。那为什么还需要一个新的C++类型的强制转换呢?新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同类型的强制转换。c++风格的强制转换其他的好处是,他们能更清晰的表明他们要干什么。程序员只要扫一眼这样的代码,就能立即知道一个强制转换的目的。
18.1 上行、下行转换的概述
18.2 static_cast静态类型转换
class Base{};
class Son:public Base{};
class Other{};
用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。
基本类型:支持
int num = static_cast<int>(3.14);//ok
上行转换:支持 安全
Base *p = static_cast<Base *>(new Son);
下行转换:支持(不安全)
Son *p2 = static_cast<Son *>(new Base);
不相关类型转换:不支持
Base *p3 = static_cast<Base *>(new Other);//err
18.3 dynamic_cast静态类型转换
dynamic_cast主要用于类层次间的上行转换和下行转换
基本类型:不支持
int num = dynamic_cast<int>(3.14);//err
上行转换:支持
Base *p1 = dynamic_cast<Base *>(new Son);//ok
下行转换:不支持(不安全)
Son *p2 = dynamic_cast<Son *>(new Base);//err
不相关类型转换:不支持
Base *p3 = dynamic_cast<Base *>(new Other);//err
18.4 const_cast常量转换
1、将const修饰的指针或引用 转换成非const(支持)
const int *p1;
int *p2 = const_cast<int *>(p1);
const int &ob = 10;
int &ob1 = const_cast<int &>(ob);
2、将非const修饰的指针或引用 转换成 const(支持)
int *p3;
const int *p4 = const_cast<const int *>(p3);
int data = 10;
const int &ob2 = const_cast<const int &>(data);