1、普通常量
声明的同时必须初始化。
变量声明之后,无法再修改改变量的值。
const int var = 1024;
2、指针
2.1 常量指针
有两种等价声明方式:
const int *p;
int const *p;
声明的时候不必初始化,可以更改指针指向,但不能通过解引用来修改指针指向的数据
例如:
以下代码合法
int a = 1024;
int b = 10;
const int *p;
p = &a;
p = &b;
以下代码不合法
int a = 1024;
const int *p;
p = &a;
*p = 10;
2.2 指针常量
声明方式,必须在声明时初始化。
int * const p = &a;
可以通过解引用来修改指针指向的数据,但不能改变指针指向
例如:
以下代码合法
int a = 1024;
int * const p = &a;
*p = 10;
以下代码不和法:
int a = 1024;
int b = 10;
int * const p = &a;
p = &b;
2.3 常量指针常量
可以通过如下声明来定义一个“不能改变指针指向,也不能通过解引用来修改指针指向的数据”
int a = 1024;
const int * const p = &a;
这样任何试图修改指针,或解引用修改指针指向的数据行为都会保存。
例如:
以下代码不合法
int a = 1024;
const int *const p = &a;
*p = 10; // 试图改变p指针指向的数据
int a = 1024;
int b = 10;
const int *const p = &a;
p = &b; // 试图改变p指针指向
3、常量引用
常量引用比较简单,也更直观。
不能修改引用的指向,也不能修改引用指向的值。
声明方法
int a = 12;
const int& p = a;
以下代码均不合法
int a = 1024;
int b = 10;
int & const p = a;
p = b; // 试图修改引用的指向
p = 123; // 试图修改引用指向的数据