Effective C++ 笔记(5)

第五部分: 实现

条款26: 尽量延后变量定义式的出现时间

请记住:
  • 尽可能延后变量定义式的出现。这样做可以增加程序的清晰度并改善程序效率。

条款27: 尽量少做转型操作

请记住:
  • 如果可以,尽量避免转型,特别是避免dynamic_cast。
  • 如果转型是必要的,尽量把它隐藏在函数背后,别让客户自己去转型
  • 尽量使用C++-style的转型

条款28: 避免返回handles指向对象内部成分

请记住:
  • 避免返回handles(包括references, 指针, 迭代器)指向对象内部。遵守这个条款可以增加封装性,帮助const成员函数的行为像个const,并将dangling handles的可能性降至最低。

条款29: 为"异常安全"而努力是值得的

请记住:
  • 异常安全函数即使发生异常也不会泄露资源或允许任何数据结构败坏. 这样的函数区分为三个可能的保证: 基本型、强烈型、不抛异常型。
  • 强烈保证往往可以通过copy and swap实现出来,但是并非对所有函数都可实现或者具备现实意义。
  • 函数提供的异常安全保证通常只取决于其调用的各个函数的最弱者。

条款30: 透彻了解inlining的里里外外

请记住:
  • 将大多数inlining限制在小型、被频繁调用的函数身上。这可使日后的调试过程和二进制升级更加容易,也可使潜在的代码膨胀问题最小化,使程序的速度提升机会最大化
  • 不要因为function templates 出现在头文件,就将它们声明为inline。

条款31: 将文件间的编译依存关系降至最低

请记住:
  • 支持编译依存性最小化的一般构想是: 相依于声明式, 不要相依于定义式。基于此构想的两个手段是Handle classes和Interface classes.
  • 程序库头文件应该以"完全且仅有声明式"的形式存在。这种做法无论是否涉及templates都适用。
posted @ 2021-01-07 19:22  thhyj  阅读(77)  评论(0编辑  收藏  举报