Effective C++ 学习笔记4 实现

  1. 尽可能延后变量定义式的出现, 这样做可增加程序的清晰度并改善程序效率;
  2. C++ 提供了四种新式转换:
    const_cast (expression) : 通常被用来将对象的常量性移除,它也是唯一有此能力的C+±style操作符
    dynamic_cast主要用来执行安全向下转型,也就是用来决定某对象是否归属继承体系中的某个类型,它是为唯一无法由旧式语法执行的动作,也是唯一可能耗费重大运行成本的转型动作
    reinterpret_cast意图执行低级转型,实际动作或结果可能去决定于编译器,这也表示它不可移植;
    static_cast用来强迫隐式转换
  3. 如果可以,尽量避免转型,特别是注重代码效率中避免dynamic_casts, 如果有个设计需要转型动作,试着发展无需转型的替代设计
  4. 如果转型是必要的,试着将它隐藏于某个函数的背后。客户随后可以调用该函数,而不需要将转型放进他们自己的代码内
  5. 宁可使用c+±style转型,不要使用旧式转型,前者很容易辨识出来,而且比较有着分门别类的职掌。
  6. 避免返回handles(包括references、指针、迭代器)指向对象内部。遵守这个条款可增加封装性,帮助const成员函数的行为像个const, 并将发生“虚吊号码牌”(dangling handles)的可能性降低。
  7. 当异常被抛出时,带有异常安全性的函数会:不泄露任何资源,不允许数据败坏。
  8. 异常安全函数提供以下三个保证之一:
    (1)基本承诺,如果异常被抛出,程序内的任何事物仍然保持在有效状态下;
    (2)强烈保证,如果异常被抛出,程序状态不改变。调用这样的函数需有这样的认识,如果函数成功,就是完全成功,如果函数失败,程序会回复到调用函数之前的状态;
    (3)不抛掷保证,承诺绝不抛出异常。
  9. 强烈保证 往往能够以copy-and-swap实现出来,但强烈保证并非对所有函数都可实现或具备现实意义。
  10. 函数提供的异常安全保证通常最高只等于其所调用之各个函数的异常安全保证中的最弱者。
  11. 将大多数inlining限制在小型、被频繁调用的函数身上。这可使日后的调试过程和二进制升级更容易,也可使潜在的代码膨胀问题最小化,使程序的速度提升机会最大化。
  12. 不要因为function templates出现在头文件,就将它声明为inline。
  13. 支持“编译依存性最小化”的一般构想是:相依于声明式,不要相依于定义式。基于此构想的两个手段是Handle classes和Interface classes。
  14. 程序库头文件应该以“完全且仅有声明式”的形式存在。这种做法不论是否涉及templates都适用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值