1. 变量和基本类型
    1. 基本内置类型
      1. 算数类型
        1. 整型
          1. char
          2. wchar_t
          3. short
          4. int
          5. long
          6. bool
        2. 浮点型
          1. float
          2. double
          3. long double
    2. 变量
      1. 左值与右值
        1. 左值
        2. 右值
      2. 变量的声明
        1. extern关键字可声明一个变量而不定义它
        2. 在全局作用域中定义的非const对象对整个程序的各个文件都可见
      3. 名字的作用域
        1. 全局
        2. 命名空间
        3. 局部
        4. 语句
    3. 引用
      1. 定义格式
        1. const引用只能是可读的
        2. 非const对象只能绑定到与该引用同类型的对象
    4. 定义类型名
      1. 格式:typedef 类型 标识符
      2. 使用条件
        1. 隐藏特定类型实现,强调使用类型的目的
        2. 精简类型定义以便理解
        3. 多次使用同一类型,保持每次使用的目的明确
    5. 枚举
      1. 定义格式:enum 枚举类型名
    6. 头文件
      1. 用常量表达式初始化的const对象
      2. inline函数
      3. 预处理器
        1. include只接受一个头文件名作为参数
          1. 尖括号认为是标准头文件,在预定义位置查找
          2. 引号中被认为是非系统头文件,在源文件所在位置查找
  2. 标准库类型
    1. 标准库bitset类型
      1. bitset
  3. 数组和指针
    1. 数组
      1. 多维数组
      2. 未提供初值列表,数组元素像普通变量一样初始化
    2. 指针
      1. const限定符
        1. 不能通过这种指针修改所指对象,无论所指是否为const
      2. const指针
        1. 指针本身的值不能修改,即不能改变指向,但可以改变所指对象的值
      3. 指向const对象的const指针
        1. 既不能改变所指对象的值,也不能改变指向
      4. 指向数组的指针
        1. 一个有效的指针三种状态
          1. 保存某确定对象的地址
          2. 指向一个对象的下一位置
          3. 值为0
  4. 表达式
    1. 表达式是否合法,合法表达式等均取决于操作数的类型
    2. 算术操作符
    3. 关系操作符合逻辑操作符
    4. 位操作符
    5. 赋值操作符
      1. 左操作数必须为非const左值
      2. 从右向左结合
    6. 自增自减操作符
    7. 箭头操作符
    8. 条件操作符
    9. sizeof操作符
      1. 对表达式使用sizeof时该表达式的值不会被计算
      2. 对数组使用sizeof将得到整个数组在内存中的长度
    10. 逗号操作符
    11. new,delete表达式
      1. new表达式
        1. 动态创建维数为0值时也将返回有效的非零指针
        2. 可以创建动态的const对象或数组,她们无法修改但可以释放
        3. 单个对象 new[const] 类型名
        4. 一个数组 new[const] 类型名[维数]
        5. 添加空()可执行值初始化操作
      2. delete表达式
        1. delete ptr和delete[] ptr分别释放单个对象和动态数组
        2. 如果指针不指向new分配的对象,则对其delete不合法
        3. delete之后需要重置为0
    12. 类型转换
      1. 隐式类型转换
        1. 算术类型间的转换
        2. 转换为指针
        3. bool类型转换
        4. 枚举类型转换为整型
        5. 转换为const对象
      2. 显式类型转换
        1. 命名的强制类型转换
          1. dynamic_cast
          2. const_cast
          3. static_cast
          4. reinterpret_cast
  5. 语句
    1. 简单语句
      1. 表达式语句
      2. 空语句
      3. 声明语句
    2. 复合语句
    3. 控制流语句
      1. 条件分支结构
      2. 循环
      3. break语句
      4. continue语句
      5. goto语句
      6. try catch语句 throw表达式
      7. return语句
  6. 函数
    1. 函数声明和定义
      1. 与变量类似
        1. 函数必须在调用前声明
        2. 函数声明可与定义分离
        3. 一个函数定义一次但可声明多次
      2. 函数声明由函数返回类型、函数返回类型和形参列表组成
        1. 函数的操作数--形参
      3. 函数一般在头文件中声明,在源文件中定义
      4. 将一个较小的、常被调用的函数定义为inline,避免调用函数的额外开销
    2. 函数的调用和参数传递
      1. 函数的调用
        1. 使用调用操作符()实现函数调用
        2. 函数调用两件事
          1. 首先隐式定义形参,并用对应的实参进行初始化
          2. 主调函数的执行被挂起,被调函数开始放行
      2. 非引用形参
        1. 指针形参
        2. const形参
        3. 不适合复制实参的情况
          1. 需要修改实参值时
          2. 需要将大型对象作为实参传递时
          3. 无法复制对象时
        4. 引用形参
          1. 可以使用引用形参返回额外信息
          2. 可以使用const引用形参避免复制实参
          3. 使用引用形参时将不需要修改的定义为const会更灵活
        5. 通过传递迭代器来传递vector等容器
        6. 数组形参
          1. 把数组直接作为实参传给函数
          2. 把数组传递给函数处理
          3. 可以通过传递指向数组的指针来传递多维数组
        7. 含有可变形参的函数
        8. 默认实参
    3. 局部对象的作用域和生命期
      1. 函数体是一个作用域,在其中定义的变量称为局部变量
      2. 自动对象是局部于函数的对象,会在每次函数调用时重新创建
      3. static局部对象确保不迟于在程序执行流程第一次经过该对象的定义语句初始化
    4. 函数的返回值和return语句
      1. 函数返回类型可为内置类型、类类型或复合类型
      2. return语句用于结束当前函数,将控制权返回给该函数的主调函数
    5. 函数的重载
      1. 重载确定的三个步骤
        1. 确定候选函数集合
        2. 从候选函数集合中选择可行函数
          1. 函数形参与该调用的实参个数匹配
          2. 每个实参的类型须与对应形参匹配
          3. 可行函数满足条件
        3. 寻找最佳匹配
          1. 精确匹配--实参与形参类型相同
          2. 通过类型提升实现的匹配
          3. 通过标准转换实现的匹配
          4. 通过类类型转换实现的匹配
    6. 函数指针
      1. 定义形式
      2. 可使用typedef简化定义
      3. 对函数指针进行初始化和赋值
        1. 同类型的函数
        2. 同类型的函数指针
        3. 0值常量表达式
      4. 通过函数指针调用函数
      5. 函数指针作为形参时,*可写可不写
      6. 函数的指针作函数返回值
    7. 主函数
      1. 返回值
      2. 使用主函数形参出来命令行选项
      3. 主函数main不允许被显示调用,取地址或重载
  7. 标准IO库
    1. IO标准库类型
    2. 标准输入输出对象
      1. cin标准输入流
      2. cout标准输出流
      3. cerr标准错误输出流
      4. clog标准日志输出流
    3. 文件输入输出流
    4. 字符串流