【读书笔记】Effective C++(01)让自己习惯C++

发布时间:2019-07-02 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了【读书笔记】Effective C++(01)让自己习惯C++脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

作者:LOGM

本文原载于 https://segmentfault.com/u/logm/articles,不允许转载~

1. 让自己习惯C++

  • 1.1 条款01:视C++为语言联邦

    • 1.1.1 C++的发展:@H_126_15@

    • 1.1.2 如何使用:视为四个次语言的组合

      • C。最基础的C。
      • 面向对象的C。C with Classes。
      • Template C++。泛型编程,更深奥的还有模板元编程(tmp),但一般人用不到。
      • STL。作者认为STL有自己的一套规约,可以单独拎出来。
  • 1.2 条款02:尽量以const, enum, inline替换 #define

    • 1.2.1 #define用于常量的场景

      • 缺点:

        • a. #define定义的常量导致编译出错时,出错提示不友好;
        • b. #define无视作用域(scoPE),无封装性。
      • 解决:

        • a. 大多数情况可以用const替换;
        • b. 旧编译器对类内static const语法较苛刻,此时可用enum替换#define。
    • 1.2.2 #define用于宏(函数)的场景

      • 缺点:

        • a. 需要注意括号的使用,给自己添麻烦;
        • b. #define无视作用域(scope),无封装性。
      • 解决:使用inline函数。
  • 1.3 条款03:尽可能使用const

    • 原因让编译器辅助对常量/常量函数的错误使用。
    • 1.3.1 const常量

      • const char* p = ...;  // p可改变,*p不可改变
        char const * p = ...;  // 同上,有些人会这么写
        char* const p = ...;  // p不可改变,*p可改变
        const char* const p = ...;  // p不可改变,*p不可改变
        
        const std::vector<int>::iterator iter = ...;  // iter不可改变,*iter可改变
        std::vector<int>::const_iterator iter = ...;  // iter可改变,*iter不可改变
        
        const Rational operator* (const Rational& lhs, const Rational& rhs); // 用于避免出现 (a * b) = c 这样的代码
    • 1.3.2 const函数

      • bool func(int a, int b) const;  // const表示该函数不改变类中的成员变量,mutable修饰的成员变量除外 
  • 1.4 条款04:对象使用前先初始化

    • 内置变量类型在声明时初始化;
    • 用户创建的类在构造函数用初始化列表初始化(注意:初始化顺序为成员变量的声明顺序有关,与初始化列表如何排列无关);
    • 不同编译单元的non-local static对象的初始化顺序不确定,尽量使用local static对象代替。

脚本宝典总结

以上是脚本宝典为你收集整理的【读书笔记】Effective C++(01)让自己习惯C++全部内容,希望文章能够帮你解决【读书笔记】Effective C++(01)让自己习惯C++所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。