尽量少做转型

旧式转型
(T)expression // C风格
T(expression) // 函数风格

新式转型:
const_cast(expression)
dynamic_cast(expression)
reinterpret_cast(expression)
static_cast(expression)


const_cast通常被用来将对象的常量性转除(cast away the constness)。它也是唯一有此能力的C+±style转型操作符。

dynamic_cast主要用于执行"安全向下转型"(safe downcasting),也就是来决定某对象是否归属于继承体系中的某个类型。它是唯一不发有就是语法执行的动作,也是唯一可能耗费重大运行成本的转型动作。

reinterpret_cast意图执行低级转换,实际动作及结果可能取决于编译器,这也就表示它不可移植。

static_cast用来强迫隐式转换(implicit conversions)。


旧式转型依旧合法,但新式转型较受欢迎。原因有二:

  • 它们容易在代码中被辨识出来。
  • 各转型动作的目标越窄化,编译器越可能诊断出错误的运用。

请记住:

  • 如果可以,尽量避免转型,特别是在注重效率的代码中避免使用dynamic_cast。如果有个设计需要转型动作,试着发展无需转型的替代设计。
  • 如果转型是必要的,试着将它隐藏于某个函数背后。客户随后可以调用该函数,而不需将转型放进他们自己的代码内。
  • 宁可使用C+±style(新式)转型,不要使用旧式转型。前者很容器辨识出来,而且也比较有着分门别类的职责。

27. Minimize casting相关推荐

  1. Effective C++ 读书笔记之Part5.Implementations

    26. Postpone variable definitions as long as possible. 总结: 尽可能延后变量定义式的出现.这样做可增加程序的清晰度并改善程序效率. 批注: 纯C ...

  2. Effective C++之条款27:尽量少做转型动作

    声明: 文中内容收集整理自<Effective C++(中文版)第三版>,版权归原书所有. 本内容在作者现有能力的基础上有所删减,另加入部分作者自己的理解,有纰漏之处敬请指正. 条款27: ...

  3. Effective C++读书笔记 摘自 pandawuwyj的专栏

    Effective C++读书笔记(0)       Start   声明式(Declaration):告诉编译器某个东西的名称和类型,但略去细节.   std::size_t numDigits(i ...

  4. C#的编码规范中文版(www.idesign.net Author: Juval Lowy) 内容

    1.命名规范 1. 使用 Pascal casing 定义类型和方法名public class SomeClass{ public SomeMethod(){}}2. 使用 camel casing ...

  5. Effective C++改善程序与设计的55个具体做法笔记

    Scott Meyers大师Effective三部曲:Effective C++.More Effective C++.Effective STL,这三本书出版已很多年,后来又出版了Effective ...

  6. pandas的dataframe节省内存

    ##############################第1种################################################### [1]代码如下(下面的会损失数 ...

  7. Effective C++ 改善55个方法

    美·Scott Meyers 候捷 电子工业 2011 刚才看到个会议时间有点晚,3.25论文都提交了 谷歌去广告的插件, 最后投了这个会议,刚刚好正合适.我说金钱与时间 ACCUSTOMING YO ...

  8. 《Effective C++》》阅读笔记

    第一章    Accustoming Yourself to C++ 1           View C++ as a federation of language (1).             ...

  9. Lesson 2 - GPU Hardware and Parallel Communication Patterns

    目录 1.Welcome to Unit2 2.Communication Patterns 3.Map and Gathre 4.练习:Scatter 5.练习:Stencil 6.Transpos ...

  10. 凸优化学习笔记:QP及SOCP问题

    凸优化学习笔记:QP及SOCP问题 QP问题 定义 是什么 几何意义 QP.QCQP.LP之间的关系 例子 最小二乘及回归问题 多面体间距离 方差定界问题 基于随机费用的线性规划(考虑随机变量的优化问 ...

最新文章

  1. eclipse设置代码自动保存步骤
  2. Ubuntu编译安装VASP
  3. 为博客园博文添加目录的两种方法
  4. Xcode 6 allows VECTOR image assets… any idea how to use them?
  5. 你一写长文章就焦虑拖延?
  6. 实践出真知之Spring Cloud之基于Eureka、Ribbon、Feign的真实案例
  7. windows 下架设svn服务器
  8. java只读xml文件头_为了生成只读的接口和xml,并命名结尾为MapperR.java和MapperR.xml...
  9. shell笔记[转]
  10. EasyUI笔记(六)数据表格
  11. android studio for android learning (十二) 查看并获取联系人信息
  12. 2022最新H5手机微商城运营源码 简约轻量版 对接最新Z支付个人免签接口 带搭建教程
  13. Nods.js安装配置(windows)
  14. 《遥远的救世主》遵守客观规律(三)——文化属性
  15. Lipschitz函数相关
  16. vue3获取当前页面组件的路由参数信息
  17. 开源大型网游服务器架构项目
  18. 日本区块链联盟助推日本区块链发展
  19. umeditor 字体大小设置无效
  20. C语言居民小区水电费管理系统[2023-01-09]

热门文章

  1. Flex4的可视化显示对象
  2. 面试题总结——JAVA高级工程师
  3. 《循序渐进Linux(第2版) 基础知识 服务器搭建 系统管理 性能调优 虚拟化与集群应用》——4.7 文本编辑工具vi...
  4. RMAN深入解析之--内存中的RMAN
  5. 西班牙打掉一黑客集团 曾千万台肉鸡
  6. Zabbix Server安装部署
  7. 3.高性能MySQL --- 服务器性能剖析( 2 )
  8. 6.Nginx 的 Rewrite 规则
  9. 40. HTTP 协议(1)
  10. php中文件上传$_FILES 的错误代码