const 对象必须初始化;
const 对象仅在文件内有效;
要想在多个文件中使用该 const 对象,需要在一个文件中定义,在其他多个文件中声明该 const 变量(定义和声明都添加extern 关键词);
const 的引用只有一种类型即 const + 类型 + &r(只能是底层const)
const 引用必须初始化,初始化时允许绑定非常量的对象,字面值以及表达式;
也就是说 const 引用可能引用一个非 const 的对象,此时,不能通过该 const 引用来修改对象的值;
const指针有三种类型:1)const + 类型 + *p(底层const)
2)类型 + *const p(顶层const)
3)const + 类型 + *const p
其中,2)、3)必须初始化;
1)表示指向常量的指针,可以指向一个非常量的对象,无法通过该指针改变所指变量的值,但是可以改变指针指向的对象;
int i = 0;
const int *p1 = &i;
// 表示不能通过该指针改变变量 i 的值,不代表变量 i 的值不能被改变
const int j = 0;
const int *p2 = &j;
// 表示不能通过该指针改变变量 j 的值,且变量 j 的值不能被改变
p1 = &j;
// 指针仍可以改变所指对象
2)表示常量指针,说明指针是一个常量,也就是存放在指针中的那个地址无法改变(该指针无法指向别的变量),但是指向的值是可以改变的(指向的变量为非 const 时);
int i = 0, j = 100;
int *const p = &i;
*p = j; // 可以通过指针改变变量 i 的值
p = &j; // 不可以改变 p 中存放的地址
const int i = 0;
int *const q = &i; // 此时不可以通过指针改变 i 的值, i 为常量
3)表示指向常量对象的常量指针,指针中存放的地址和指针所指向的值都不可以改变,且必须初始化;
double val = 3.14;
const double *const p = &val; // 初始化
*p = 9.99; // 不可以, p 是一个指向常量的指针,无法通过该指针改变指向的值
double dval = 1.314;
p = &dval; // 不可以,p是常量指针,指针中存放的地址不可以改变
另外,赋值操作时,常量指针可以赋值给普通指针,普通指针无法赋值给常量指针