C++ primer 5th 第二章笔记


总结

2.1 : 基本内置类型
  2.1.1 算术类型
    - 浮点直接使用double
    - char当1字节整数使用 指明 unsigned 和 signed
    - 超过 int 的类型直接使用 long long

  2.1.2 类型转换:
    - 超出范围类型 -> int 结果是为定义的
    - 无符号不要使用的场景:
         (1) 和有符号混合的表达式
      (2) for 中 条件 <0;

  2.1.3 字面值常量:
     - 可以使用 前缀 和 后缀指定类型

2.2 变量:
  2.2.1 变量定义:
     -C++11 引入了使用 {} 方式初始化变量
     - extern 关键字

2.3 复合类型:

  基于其他类型的类型 : 指针 和 引用:

  2.3.1 引用:

    - const 引用指向非const变量会创建一个临时变量
  2.3.2 指针:
    - 注意 {} 内不初始化的指针很危险
  2.3.3 理解复杂的复合声明类型:
    - 从右边向左边阅读即可。

2.4 const限定符号:
  const 默认仅在当前cc文件下有效 , 定义时候添加extern 关键,字其他文件才能extern

  2.4.1 const 引用:
      - cosnt 引用 指向非const变量创建临时变量
  2.4.2 指针 和 const:
     - 指向的const的指针
      - const指针
  2.4.3 顶层const 和 底层const:
    - 修饰是变量本身 : 顶层const
    - 修饰指向的变量 : 底层const
  2.4.4 constexpr 表达式:
    - 让编译器件去判断是否为常量表达式吧
    - constexpr只能用于字面值类型 [ 算术类型 , 指针 , 引用]
    - constexpr 修饰的指针的const是顶层const 要的是固定地址
    特别总结:
      1.const对于指针来说有顶层 和 底层之说
      2.常量表达式一定要在编译的时候得到, 满足即使const类型, 又是常量表达式初始化 才能算常量表达式
      3.对于 2 来说, 程序员很难判断是不是常量表达式, 因此C++使用了constexpr 来检测是不是constexpr
      4.constexpr 只能对算术类型 , 指针 , 引用(不考虑了)使用,因为其是字面值
      5.constexpr 修饰的指针只能使用固定地址的变量(全剧变量) 或 nullptr 初始化, 且const层级为顶层的。

2.5 处理类型:
    2.5.1 类型别名:
      - typedef int BOOL;
      - using BOOL = int;
      - 如果指针类型取了别名 , const修饰是顶层cnost
    2.5.2 auto :
      - 忽略初始值引用 , 如果auto 和 & 连用 , 则保留初始值的 顶层const , 否则忽视顶层const
      - const auto 为保留顶层const
    2.5.3 decltype:
      - decltype 保留引用 保留 顶层const
      - decltype((变量)) 为变量的引用类型
      - decltype(赋值语句) 为引用类型
      - decltype(表达式) 为表达式的结果的类型

2.6 自定义数据结构:
      - 数据结构 : 数据集合 + 操作集合。
      - C++11 可以使得定义类的时候给予初始值。
      - 类定义在头文件当中, 确保引用的cc文件定义均相同。

原文地址:https://www.cnblogs.com/Geek-Z/p/10022341.html