Effective C++ 条款27
来源:互联网 发布:淘宝提醒发货不见了 编辑:程序博客网 时间:2024/05/16 16:13
尽量少做转型动作
尽量少做转型动作有什么目的?很明显无非就是提高程序的稳定性,提高程序的执行效率。
那么,有哪些转型方式?每种方式都有什么弱点? 这是我们本节学习的重点。
C++有四种转型:
const_cast<T>(expression)dynamic_cast<T>(expression)reinterpret_cast<T>(expression)static_cast<T>(expression)
每种转型的作用如下:
1.const_cast通常被用来将对象的常量特性转除(cast away the constness)。它也是唯一由此能力的C++-style转型操作符。
2.dynamic_cast主要用来执行“安全向下转型”(safe downcasting),也就是用来决定某对象是否归属继承体系中的某个类型。它是唯一无法由旧式语法执行的动作,也是唯一可能耗费重大运行成本的转型动作(后面细讲)。
3.reinterpret_cast意图执行低级转型,实际动作(结果)可能 取决于编译器,这表明其不可移植。例如将pointer to int转为int,这类转型常用在低级代码。例如,讨论讨论如何针对原始内存(raw memory)写一个调试用的分配器(debugging allocator),见条款50.
4.static_cast执行强迫隐式转换(implicit conversions)。例如将int转为double,non-const转为constant等。它也可以用来执行一些转换的反响转换,但无法将const转为non-const。
我来总结一下以上的四点,
首先对于const_cast是起到一个去除const特性的作用。
去掉const属性:const_case
class Window{public: virtual void onResize(){……}; ……};class specialWindow:public Window{public: virtual void onResize(){ static_cast<Window>(*this).onResize();//调用的是副本。 …… }};
上面代码的执行结果是基类中的数据没有变化,derived类中的数据发生变化。这是因为static_cast<Window>(*this).onResize();
这句调用的是基类的副本,和当前对象无关。作者很强调这部分内容,可是,大家不要变傻,我们仔细看一下代码,他转型的本来就是一个副本!只需改动一点点就能实现一致性。如下
class Window{public: virtual void onResize(){……}; ……};class specialWindow:public Window{public: virtual void onResize(){ static_cast<Window*>(this).onResize();//ok …… }};
- 《Effective C++》资源管理:条款26-条款27
- Effective C++:条款01
- Effective C++:条款02
- Effective C++:条款03
- Effective C++:条款04
- Effective C++:条款05
- Effective C++:条款06
- Effective C++:条款07
- Effective C++:条款08
- 《effective C++》条款三
- 《effective C++》条款5
- 《effective C++》条款六
- Effective C++--经验条款
- Effective C ++ 条款34
- 《Effective C++》条款05
- 《Effective C++》条款06
- 《Effective C++》条款08
- 《Effective C++》资源管理:条款13-条款15
- LeetCode 题解(128): Majority Element
- java 单链集合实现
- Java基础---网络编程
- WIFI基本知识整理
- 使用 EhCache 关于临时目录的一个注意事项
- Effective C++ 条款27
- 大根堆-小根堆-堆排序-C实现
- frame,iframe,frameset之间的关系与区别
- 黑马程序员----多态和内部类、异常
- 设置环境变量的三种方法
- 【MySQL】常见的mysql 进程state
- android开发中的自定义属性用法详解
- php 异步上传原理(iframe)
- codeforces #310 B B. Case of Fugitive(贪心)