1、常见的类型转换有2种:隐式转换 和 强制转换
隐式转换:a = b
强制转换:char ch = (char);
这两种转换过于简单粗暴,如果出错无法定位
2、C++中提供了4个转换
(1)static_cast
用于普通类型的转化,凡是可以隐式转换的地方,都可以用,在编译期间会进行类型识别,类型不对,转换失败。
不能用来做不同类型的指针转换,有一个特例,父类指针指向派生类对象时,做的隐式转换不会出现问题
a = static_cast<int>(b)
(2)reinterpret_cast
用来指针之间的转换。
int *pa = reinterpret_cast<int*>(pb);
int *pa = reinterpret_cast<int*>(0x12345678); 整型与指针之间的转换
可以隐式转换的地方用static_cast,需要指针强制转换的用reinterpret_cast
(3)dynamic_cast
层次关系中的转换,在运行时进行类型识别(RTTI),做的是强制转换,如果类型匹配,转换成功。类型不匹配,转换失败,返回NULL。
进行基类与派生类之间的转换,把基类指针转为派生类指针,一定用dynamic_cast
(4)const_cast
用来去掉只读属性