zoukankan      html  css  js  c++  java
  • 《Effective C++》让自己习惯C++:条款1-条款4

    条款1:视C++为一个语言联邦

    可以将C++分为4个层次:

    • 1、C:C++实在C语言的基础上发展而来的。
    • 2:Object-Oriented C++:C++面向对象。
    • 3:Template C++:C++中的泛型编程。
    • 4:STL:这是一个标准模板库。

    条款2:尽量以const、enum、inline替换#define

    • const的好处:
      • define直接预编译时常量替换,出现编译错误不易定位(不知道常量是哪个变量)
      • define没有作用域,const有作用域提供了封装性
    • enum的好处:
      • 提供了封装性
      • 编译器肯定不会分配额外内存空间(其实const也不会)
    • inline的好处:
      • define宏函数容易造成误用(下面有个例子)
    //define误用举例
    #define MAX(a, b) a > b ? a : b
    int a = 5, b = 0;
    MAX(++a, b) //a++调用2次
    MAX(++a, b+10) //a++调用一次
    

    条款3:尽可能使用const

    • const定义接口,防止误用
    • const成员函数
      • 作用于const 对象
      • 不可以更改成员变量
      • 只能调用const成员函数(非const成员可以调用所有成员函数)

    条款4:确定对象使用前已先被初始化

    • 内置类型需要定义时初始化
    • 使用初始化序列,而不是在构造函数中赋值
      • 构造函数中赋值会先调用default构造函数,再调用copy赋值操作符
      • 初始化序列只调用copy构造函数,效率更高
      • 最好使初始化序列顺序与声明顺序相同
    • static对象
      • 作用域为从构造开始到程序结束为止(非stack和heap-based 对象)
      • 包含global对象、定义于namespace作用域内对象、在class内、在函数内、以及在file作用域内被声明为static的对象
      • 函数内的static对象被称为local static对象,其他static对象被称为non-local static 对象
      • 不同编译单元内的non-local static对象的初始化次序无明确定义
    • 将static对象放入一个专属函数中(将non-local static对象替换为local static对象)
      • 函数内的local static对象会在“函数被调用期间”“首次遇上该对象的定义”时被初始化
      • 函数未被调用不会触发该对象的构造函数
    Base& instance(){
        static Base b;
        return b;
    }
    
  • 相关阅读:
    学习Python第三天
    学习Python第二天
    学习Python第一天
    centos7 系统优化
    crond计划任务
    day2
    day1
    A.浏览器访问 kube-apiserver 安全端口
    12.清理集群
    11.部署 harbor 私有仓库
  • 原文地址:https://www.cnblogs.com/narjaja/p/10058513.html
Copyright © 2011-2022 走看看