天天看點

c/c++ const關鍵字 常量指針 指針常量 常量引用差別和示例

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