您的位置:首页 > 编程语言 > C语言/C++

4 type cast operators in C++

2011-01-04 21:57 302 查看
摘自《高质量程序设计指南》第3版(林锐,韩永泉)263页。
C++新增了4个类型转换运算符,它们是:
1. static_cast<dest_type>(src_obj),作用相当于C风格的强制转换,但是在多重继承的情况下,它会正确地调整指针的值(即确定dest_type类型的指针应该指向src_obj中的什么位置),而C风格的强制转换则不会调整;它可以遍历继承树来确定src_obj与dest_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_obj与dest_type的关系,具体在本书第15章讲述。
补充:1)C++中默认执行的转型操作是static_cast,手工执行static_cast时需确保dest_type和src_obj间应存在一定的关系,如继承关系等。对2种没有任何关系的ADT进行static_cast会产生编译错误,此时需用reinterpret_cast完成,但无法保证转型后的数据有意义。2)用const_cast来去除一个对象的const属性时,如用普通指针指向一个const对象,未必可以修改原对象的值。如果原对象是个ADT常量,则可以修改成功;若原对象为基本数据类型的常量,则无法成功。这和不同类型的常量相异的存储方式有关系。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: