1. 仔细区别 pointers 和 references(当你知道你需要指向某个东西,而且绝不会改变指向其他东西,或是当你实现一个操作符而其语法需求无法由 pointers 达成,你就应该选择 references;任何其他时候,请采用 pointers)
  2. 最好使用 C++ 转型操作符(static_castconst_castdynamic_castreinterpret_cast
  3. 绝不要以多态(polymorphically)方式处理数组(多态(polymorphism)和指针算术不能混用;数组对象几乎总是会涉及指针的算术运算,所以数组和多态不要混用)
  4. 非必要不提供 default constructor(避免对象中的字段被无意义地初始化)
  5. 对定制的 “类型转换函数” 保持警觉(单自变量 constructors 可通过简易法(explicit 关键字)或代理类(proxy classes)来避免编译器误用;隐式类型转换操作符可改为显式的 member function 来避免非预期行为)
  6. 区别 increment/decrement 操作符的前置(prefix)和后置(postfix)形式(前置式累加后取出,返回一个 reference;后置式取出后累加,返回一个 const 对象;处理用户定制类型时,应该尽可能使用前置式 increment;后置式的实现应以其前置式兄弟为基础)
  7. 千万不要重载 &&||, 操作符(&&|| 的重载会用 “函数调用语义” 取代 “骤死式语义”;, 的重载导致不能保证左侧表达式一定比右侧表达式更早被评估)
  8. 了解各种不同意义的 new 和 delete(new operatoroperator newplacement newoperator new[]delete operatoroperator deletedestructoroperator delete[]
  9. 利用 destructors 避免泄漏资源(在 destructors 释放资源可以避免异常时的资源泄漏)
  10. 在 constructors 内阻止资源泄漏(由于 C++ 只会析构已构造完成的对象,因此在构造函数可以使用 try...catch 或者 auto_ptr(以及与之相似的 classes) 处理异常时资源泄露问题)
  11. 禁止异常流出 destructors 之外(原因:一、避免 terminate 函数在 exception 传播过程的栈展开(stack-unwinding)机制种被调用;二、协助确保 destructors 完成其应该完成的所有事情)
  12. 了解 “抛出一个 exception” 与 “传递一个参数” 或 “调用一个虚函数” 之间的差异(第一,exception objects 总是会被复制(by pointer 除外),如果以 by value 方式捕捉甚至被复制两次,而传递给函数参数的对象则不一定得复制;第二,“被抛出成为 exceptions” 的对象,其被允许的类型转换动作比 “被传递到函数去” 的对象少;第三,catch 子句以其 “出现于源代码的顺序” 被编译器检验对比,其中第一个匹配成功者便执行,而调用一个虚函数,被选中执行的是那个 “与对象类型最佳吻合” 的函数)
  13. 以 by reference 方式捕获 exceptions(可避免对象删除问题、exception objects 的切割问题,可保留捕捉标准 exceptions 的能力,可约束 exception object 需要复制的次数)
  14. 明智运用 exception specifications(exception specifications 对 “函数希望抛出什么样的 exceptions” 提供了卓越的说明;也有一些缺点,包括编译器只对它们做局部性检验而很容易不经意地违反,与可能会妨碍更上层的 exception 处理函数处理未预期的 exceptions)
  15. 了解异常处理的成本(粗略估计,如果使用 try 语句块,代码大约整体膨胀 5%-10%,执行速度亦大约下降这个数;因此请将你对 try 语句块和 exception specifications 的使用限制于非用不可的地点,并且在真正异常的情况下才抛出 exceptions)
  16. 谨记 80-20 法则(软件的整体性能几乎总是由其构成要素(代码)的一小部分决定的,可使用程序分析器(program profiler)识别出消耗资源的代码)
  17. 考虑使用 lazy evaluation(缓式评估)(可应用于:Reference Counting(引用计数)来避免非必要的对象复制、区分 operator[] 的读和写动作来做不同的事情、Lazy Fetching(缓式取出)来避免非必要的数据库读取动作、Lazy Expression Evaluation(表达式缓评估)来避免非必要的数值计算动作)
  18. 分期摊还预期的计算成本(当你必须支持某些运算而其结构几乎总是被需要,或其结果常常被多次需要的时候,over-eager evaluation(超急评估)可以改善程序效率)

一文总结More Effective c++相关推荐

  1. 一文总结《Effective C++》

    Effective C++ 视 C++ 为一个语言联邦(C.Object-Oriented C++.Template C++.STL) 宁可以编译器替换预处理器(尽量以 const.enum.inli ...

  2. 2020年六级作文Why students should be encouraged to develop effective communication skills

    很好写的八股鸡汤文. Develop Effective Communication Skills of Students 第一段: In todays's society, the importan ...

  3. [译]高效的TensorFlow 2.0:应用最佳实践以及有什么变化

    Tensorflow团队早早就放出了风声,Tensorflow 2.0就快来了,这是一个重要的里程碑版本,重点放在简单和易用性上.我对Tensorflow 2.0的到来充满期待,因此翻译了这篇Tens ...

  4. Go语言程序结构分析初探

    每一种编程语言都有自己的语法.结构以及自己的风格,这也是每种语言展现各自魅力及众不同的地方.Go也不例外,它简单而优雅,与此同时使用起来也很有趣.在本文中,我们将讨论以下几点: Go程序结构 如何运行 ...

  5. 段错误 (核心已转储)_向大厂看齐!为自己的程序增加自动转储的功能!

    如果你还不清楚什么是转储文件,不知道什么时候需要转储文件,请参考转储文件系列文章的第一篇 -- 转储文件知多少. 前言 不知道各位小伙伴有没有遇到过 微信 或者 QQ 崩溃的情况.它们在崩溃的时候都会 ...

  6. C++ 常见崩溃问题分析

    一.前言 从事自动化测试平台开发的编程实践中,遭遇了几个程序崩溃问题,解决它们颇费了不少心思,解决过程中的曲折和彻夜的辗转反侧却历历在目,一直寻思写点东西,为这段难忘的经历留点纪念,总结惨痛的教训带来 ...

  7. 使用 Python 5 年后,我转向了Go

    我喜欢Python,在过去的五年里,它一直是我的首选语言.Python非常友好且易于学习,迄今仍然超级有效. 几乎可以用它来做任何事情 – 从创建简单的脚本,Web开发,到数据可视化以及机器学习. 但 ...

  8. 向大厂看齐!为自己的程序增加自动转储的功能!

    如果你还不清楚什么是转储文件,不知道什么时候需要转储文件,请参考转储文件系列文章的第一篇 -- 转储文件知多少. 前言 不知道各位小伙伴有没有遇到过 微信 或者 QQ 崩溃的情况.它们在崩溃的时候都会 ...

  9. Python 编程 5 年后,我转向了 Go!

    作为如今火了半边天的动态语言 Python ,凭借着较强的灵活性.可移植.可扩展等特性广受开发者喜爱.但是和 Google 的第二款开源编程语言 Go 相比,Python 的性能完全处于较弱一方. 在 ...

最新文章

  1. tf.contrib 的命运走向
  2. rabbitmq实战:高效部署分布式消息队列_一文看懂消息队列中间件--AMQ及部署介绍...
  3. python爬取贴吧所有帖子-Python爬虫实例(一)爬取百度贴吧帖子中的图片
  4. 北斗导航 | GPS卫星导航技术重要人物简介
  5. android 修改包名
  6. java 创建定时器_SpringBoot创建定时任务
  7. 文件从一台服务器拷贝到另一台服务器
  8. spark学习-53-Spark下Java版HBase下的根据权重获取最真实数据
  9. jq php上传图片插件,ajaxImageUpload
  10. 学python必须得英语精通吗_“学习python必须精通的几个模块“
  11. linux下eclipse找不到插件位置,Linux 下安装Eclipse时所遇到的问题
  12. Open Inventor学习资源
  13. 知云文献翻译打不开_科研福音,论文翻译神器系列!
  14. dz60自定义配列并用qmk编译固件
  15. python做淘宝_用python做个淘宝双十一满减攻略,再也不用算算算了
  16. 云服务器哪家好?云服务器评测对比
  17. 王者荣耀会成为下一个微信吗?
  18. 从互联网角度出发,慧算账受客户追捧
  19. 宏基因组分析-基于组装
  20. Halide学习笔记----Halide tutorial源码阅读5

热门文章

  1. Abra CEO:PayPal满足的比特币购买需求比每天挖出的比特币数量更多
  2. 最新出炉|也许你该看看这份的模型数据
  3. 特征做得好,模型没烦恼
  4. 数据同步Sqoop用法之mysql与Hive导入导出
  5. 中后台管理信息系统通用原型方案、业务中台管理系统、业务中台架构、管理信息系统、订单管理、客户管理、货源管理、财务管理、客服管理、营销管理、办公申请、协作管理、CMS、OA、CRM、ERP、Axure
  6. 暑假周进度总结报告5
  7. python3.6+selenium_使用外部数据的数据驱动
  8. Codeforces 708D 上下界费用流
  9. codevs 4927 线段树练习5 线段树基本操作模板
  10. 创建ros的程序包--3