《effective C++》中第九章的内容,稍稍加上自己的理解。
C++中,显式转换也称为强制类型转换(cast),包括以下列名字命名的强制类型转换操作符:static_cast、dynamic_cast、const_cast、reinterpret_cast。
一般形式: cast-name<type>(expression)
dynamic_cast:
该运算符把变量转换成type类型的对象,但type必须是类的指针、类的引用或者void*。若type为指针类型,则expression也必须是指针类型,(引用类型同理)。
dynamic_cast操作符一次执行两个操作:验证被请求的转换是否有效;实际转换。
dynamic_cast主要用户类层次间的上行转换和下行转换。
static_cast:
编译器隐式执行的任何类型转换都可以由static_cast显示完成。
static_cast可完成的类型转换:1,类型间所有的隐式转换。2,类层次间的下行转换(把基类指针或引用转换成子类指针或引用)。
但是static_cast的完成下行转换,没有动态类型检查,所以不安全(dynamic_cast的转换要进行动态类型检查)。
const_cast:
改变变量的const性质。添加或删除const属性。
reinterpret_cast:
在引入命名的强制类型转换操作符之前,显示强制转换用圆括号将类型括起来实现。
int *ip;
char *pc=(char*) ip;
等价于
int *ip;
char *pc=reinterpret_cast<char *>(ip);