C++11新特性的读书记录

来源:互联网 发布:苹果电脑开淘宝店铺 编辑:程序博客网 时间:2024/05/20 05:03

第二章 保持兼容

  1. 预定义宏:通过预定义宏,#ifdef #endef等预处理命令,完成代码的平台性支持;
  2. func : 反回所在函数名字
  3. #progma 一条预处理指令,
    #progma once :告诉编译器,该头文件只被编译一次
    等同与:
    #ifndef THIS_HEADER
    #define THIS_HEADER
    // 一些头文件;
    #endif

  4. 变长参数的宏定义和VA_ARGS: (P41)
    FILE, LINE

  5. 宽窄字符串的链接
    char - wchar_t:先转换,再链接

  6. long long:在不同的平台上,可以有不同的长度,但至少是64位
    long long; unsigned long long ;
    信息在中,记录了LLONG_MIN,LLONG_MAX,ULL_MAX(P42)

  7. 整形的提升:Integral promotion:
    转化规则:低等级的整形转化成高等及的,有符号的转换为无符号的。

  8. __cplusplus,用来检测编译器支持的板本,可以使用#error报错

  9. 静态断言:断言并不是程序运行时所需要的,而是帮助程序调试。C++ 提供标准assert宏,帮助程序断言。
    可以使用宏NDEBUG 来禁用宏assert;

  10. 快速初始化成员变量:

  11. 非静态成员的sizeof:c++11支持对类中非静态成员使用sizeof
  12. friend 类友元的声明不再需要使用关键字class,而且可以声明一个类的别名为类友元;
  13. 虚函数就是给派生类用来重载的。如果不想让派生类来重写,就定义为非虚函数。
  14. final 关键字的作用,是禁止派生类重写final所修饰的需函数,C++11借鉴了java的这种方式。在派生类的过程中,通过final可以任意的终止一个接口的可重载性。
  15. 派生类在虚函数声明时使用了描述符override,那么派生类必须重写其基类中同名函数,否则代码无法编译通过。解决继承结构长、接口错误等问题。
  16. extern,外部变量声明:

    extern int i; // 在声明处的文件的数据区,不会存在这个变量i ;

  17. 类似外部变量,也存在“外部模板”的问题。在不同的代码文件中调用func传入相同类型的参数,会出现多个相同的函数实例。

    template <typename T> void func(T){}
    连接器通过编译器的辅助手段,会把重复的模板函数删除。
    使用“外部模板”,可以省略编译器的实例化和连接器的删除。节省编译器和连接器的时间消耗。

  18. 显示实例化(explicit instantiation):

    template void func<int>(int);
  19. 外部模板声明

    extern template void func<int>(int);

第三章 通用为本,专用为末

  1. 继承构造函数
    1. C++自定义类型:类!是C++面向对象的基础。
    2. 类可以自动获得基类的成员变量和接口,(虚函数,纯虚函数,public派生类);
    3. 类的非虚函数无法被派生类使用,包括构造函数;
    4. using::声明派生类使用基类的成员函数;(76);
    5. 基类的构造函数有默认的参数,派生类不会继承构造函数的默认参数;默认参数会导致多个构造函数的产生。
      1.
  2. 委派构造函数

    public:  Info() {InitReset();};  Info(int i):Info() {type = i;};  Info(char e):Info() {name = e;};  // 委派构造函数:目标构造函数(初始化列表位置)
    1. 委派构造:委派函数将构造任务委派给目标函数来完成类的这样一种构造方式。
  3. 移动语义:

    1. 悬挂指针,不在指向有效的内存,在悬挂指针上释放内存会产生严重的错误。
    2. 移动语言:算了吧,没看懂,下次再看;(91)
  4. 坐值,右值,右值引用

    1. 可以取地址,有名字的是左值,反之是右值
    2. C++11中,右值有两个概念:将亡值,纯右值;
    3. C++11中,所有的值属于,左值,将亡值,纯右值,三者之一(94);
    4. 左值引用和右值引用都是引用类型
    5. 左值引用是具名变量值的别名,右值引用是不具名(匿名)变量的别名。(100)
原创粉丝点击