C++转型操作符:const_cast, static_cast, dynamic_cast和reinterpret_cast

    参考资料[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_百度百科

你可能感兴趣的:(C++转型操作符:const_cast, static_cast, dynamic_cast和reinterpret_cast)