初始化:const对象一经创建其值不能再改变,所以const对象必须初始化。
范围:默认const对象仅在文件内有效。例外:extern const
常量引用:不能通过该引用修改所绑定的对象。
int i=5; int &r1=i; const int &r2=i; r1=1; //正确,可以通过引用修改所绑定对象的值 r2=0; //错误,不能通过常量引用修改所绑定对象的值
指针和const:
- *const 常量指针:把指针本身定义为常量
- 不变的是指针本身的值,而非所指向常量的值。
- const* 指向常量的指针:和常量引用一样,不能通过该指针改变对象的值。
- const *const 指向常量对象的常量指针
顶层和底层const:
- 顶层const:本身是常量,不能改变本身的值
- 底层const:指向常量,可以改变自身的值
- 不能用指向常量的指针去给一个指针赋值(这相当于用常数给指针赋值,不合法)
常量表达式:值不会改变,且在编译过程就能得到计算结果的表达式。
- 字面值
- 算术类型
- 引用
- 指针
- 用常量表达式初始化的const对象
int size=27; //数据类型只是普通int而非const int,值可能会改变,所以不是 const int sz=get_size(); //具体值要到运行时才能获取,所以不是
constexpr :如果你认定变量是一个常量表达式,就把它声明成constexpr类型 。constexpr int *p //这是一个*const类型(C++11)