《Effective C++》笔记 05 - 实现

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/engrossment/article/details/96096289
  • 条款 26 - 尽可能延后变量定义式出现的时间
    • 延后至该变量必须使用或能够给其初始值为止。这是为了使程序更清晰,更高效。
  • 条款 27 - 尽量少做转型动作
    • const_cast<T>(), dynamic_cast<T>(), reinterpret_cast<T>(), static_cast<T>()
    • 新式转型方式的优点:显式使用,意图明确;转型动作的目标窄化,减少误用情况。
    • 许多程序员相信,转型其实什么都没做,只是告诉编译器把某种类型视为另外一种类型。这是错误的观念。
    • 尽量避免使用转型,特别是 dynamic_cast 对效率影响很大。
  • 条款 28 - 避免返回 handles 指向对象内部成分
    • handles 包括 reference、指针、迭代器
    • 返回这样的 handles 会破坏类的封装性,也可能引起“虚吊号码牌”(dangling handles)问题,也即是指向的内容可能已被销毁。
  • 条款 29 - 为“异常安全”而努力是值得的
    • 异常安全的含义是,不泄露任何资源,不造成任何数据败坏。
    • 异常安全保证有 3 个不同程度的级别:基本型、强烈型、不抛异常型。
    • 一个系统的异常安全等级取决于各个函数中的最低等级者。
  • 条款 30 - 透彻了解 inlining 的里里外外
    • 将大多数 inlining 限制在小型、被频繁调用的函数身上。这可使日后的调试过程和二进制升级(binary upgradability)更容易,也可使潜在的代码膨胀问题最小化,使程序的速度提升机会最大化。
    • 不要只因为 function templates 出现在头文件,就将它们声明为 inline。
  • 条款 31 - 将文件间的编译依存关系降至最低
    • 支持“编译依存性最小化”的一般构想是:相依于声明式,不要相依于定义式。基于此构想的两个手段是 Handle classes 和 Interface classes。
    • 程序库头文件应该以“完全且仅有声明式”(full and declaration-only forms)的形式存在。这种做法不论是否涉及 templates 都适用。

2019年7月16日

展开阅读全文

没有更多推荐了,返回首页