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; // 試圖修改引用指向的資料