4 type cast operators in C++

摘自《高质量程序设计指南》第3版(林锐,韩永泉)263页。

C++新增了4个类型转换运算符,它们是:

1.       static_cast<dest_type>(src_obj),作用相当于C风格的强制转换,但是在多重继承的情况下,它会正确地调整指针的值(即确定dest_type类型的指针应该指向src_obj中的什么位置),而C风格的强制转换则不会调整;它可以遍历继承树来确定src_objdest_type的关系,但是只在编译时进行(此所谓静态);如果使用它来做downcast操作(即把一个base class的指针转换成一个derived class的指针,当然那个base class的指针最好原是指向一个derived class的对象,这个过程应该调用dynamic_cast来完成),则会存在隐患。

2.       const_cast<dest_type>(src_obj),用于去除一个对象的const/volatile属性。

3.       reinterpret_cast<dest_type>(src_obj),我们可以借助它把一个整数转换成一个地址,或者在任何两种类型的指针之间转换。使用该运算符的结果很危险,请你不要轻易使用。

4.       dynamic_cast<dest_type>(src_obj),在运行时遍历继承树(类层次结构)来确定src_objdest_type的关系,具体在本书第15章讲述。

补充:1)C++中默认执行的转型操作是static_cast,手工执行static_cast时需确保dest_type和src_obj间应存在一定的关系,如继承关系等。对2种没有任何关系的ADT进行static_cast会产生编译错误,此时需用reinterpret_cast完成,但无法保证转型后的数据有意义。2)用const_cast来去除一个对象的const属性时,如用普通指针指向一个const对象,未必可以修改原对象的值。如果原对象是个ADT常量,则可以修改成功;若原对象为基本数据类型的常量,则无法成功。这和不同类型的常量相异的存储方式有关系。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章