总结
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文件定义均相同。