1.声明与定义
- extern 声明且没分配空间
- 定义 需要初始化即分配空间
2.const
常量 const int p =0;
- 初始化之后不可以被修改
- 只在文件内有效 多个的话需要extern声明
- 该变量必须初始化(可以在运行时初始化)。
引用
- 对常量的引用不能用来改变其初始化的值
- 必须是一个常量引用才能指向常量
- 允许常量引用绑定非常量 (临时量,能转换到常量引用的类型即可)
指针 const int *p 指向常量的指针
- 不能通过常量指针改变常量的值
- 只能用指向常量的指针来存储常量对象的地址
- 一直指向常量的指针可以指向非常量类型
常量指针 *const int p
- 常量指针必须初始化 且初始化之后不能修改存放在里面的地址
- 他存放的地址不变代表指向的对象不变 对象本身内容可以改变
顶层const和底层const
- 顶层 指针本身是常量
- 底层 指针指向对象是常量
- 拷贝 顶层不受影响 底层 拷贝必须也是底层const
constexpr
- 判断常量表达式
- 有constrxpr一定是常量表达式,并且必须用常量表达式初始化
- 字面值类型(算数类型,引用,指针,指针初始化nullptr或0)才可以被constexpr定义
- constexpr是用来修饰常量指针
3.auto
- 必须有初始值
- 初始值类型不完全一样