参考资料[1]P24给出了const_cast和static_cast的用例,P117更是对const_cast, dynamic_cast, reinterpret_cast和static_cast做了详细的说明。相对比传统的C语言风格的转换方式(当然C++中也支持这种传统的方式,这里叫做旧式转型),上述转型操作符被称为新式转型(参考资料[1]P117)。本文对C++的新式转型操作符进行一个简单的总结。
1 const_cast
根据参考资料[1]P24的实例和P117的说明,const_cast主要用于去除对象的常量性,也是C++新式转型操作符中唯一有此能力的转型操作符。更加详细的说明,见参考资料[2]。
实例:
const int a; // const变量 int b = const_cast< int >( a ); // 去除a变量的const性质注意:
const_cast只能用于将const对象-->non-const对象,不用反过来用;non-const对象-->const对象,应使用下面的static_cast来完成。
2 static_cast
参考资料[1]P117指出,static_cast用来强迫隐式转换( implicit conversions ),例如上一章提到:non-const对象-->const对象,还有int-->double等等。
实例1:
int a; // non-const变量 const int b = const_cast< const int >( a ); // 为a变量添加const性质
实例2:
int a; // int变量 double b = const_cast< double >( a ); // int-->double变量
3 dynamic_cast
参考资料[1]P117指出,dynamic_cas主要用于执行“安全向下转型”(safe-downcasting),也就是用来决定某个对象是否归属继承体系中的某个类型。这是唯一无法由旧式语法执行的动作。
4 reinterpret_cast
参考资料[1]P117指出,reinterpret_cast用于执行低级转型,实际动作(及结果)可能取决于编译器,这也就表示它不可移植。例如将一个pointer to int转型为一个int。
参考资料
[1]Effective C++ 中文版(第三版)
[2]const_cast_百度百科