C C 中const修飾符總結

2021-08-08 08:31:45 字數 2557 閱讀 7376

c/c++中的const是乙個修飾符,它允許你指定乙個語義上的約束,也就是可以通過const指定乙個「不該被改動」的物件,而編譯器會強制實施這項約束。

const語法很多 但都不複雜 下面我將分別講述各種語法及其作用。

在講述const修飾符用在指標上有什麼效果之前先來看下指標不加const修飾符的情況:

int num1 = 10;

int num2 = 20;

int* p = &num1; //將指向int型指標變數p指向num1

*p = 55; //good!

p = &num2; //good!

以上**在編譯時是沒有任何問題的 指標變數p可隨意改變所指向的位址 也可以隨意改變指標p所指向的資料 此時該指標p是沒有約束的。

但是當指標p加上const修飾符進行約束後 又會是怎樣的效果呢?看如下**:

int num1 = 10;

int num2 = 20;

//形式1

const int* p = &num1;

p* = 55; //error!

p = &num2; //good!

//形式2

int* const p1 = &num1;

*p1 = 66; //good!

p1 = &num2; //error!

//形式3

const int* const p2 = &num1;

*p2 = 77; //error!

p2 = &num2; //error!

如上所示 對指標進行const修飾有3種形式 

第1種形式 const在 * 前面 表示的是常量指標 也就是說該指標變數p所儲存的位址可以改變 但是位址所處的資料無法更改,而p* = 55;這行**因為試圖更改位址所處的資料而被編譯器所禁止 所以編譯不通過。而該種形式又有倆種寫法:const int* p;和int const *p; 這倆種寫法是等價的。

第2種形式 const在 * 後面 表示的是指標常量 也就是說該指標變數p1所儲存的位址不能改變 但是位址所處的資料可以更改,而p1 = &num2;這行**試圖改變p1所儲存的位址所以編譯器也是不允許的 從而編譯不通過。

第3種形式 是前倆種形式的結合 表示該指標變數p2即不可以改變所儲存的位址 也不能更改位址所處的資料,所以*p2 = 77;試圖改變位址所處的資料和p2 = &num2;試圖改變指標變數所儲存的位址 均是編譯器不允許的。

另外 const修飾符也可運用在內建型別和使用者自定義型別上 如下**:

int main(void)
用內建型別定義變數並且用const進行修飾 則該變數的值不可修改(常變數)而且必須在定義的時候進行初始化。

假設有如下類定義:

class base;

base::base(int id_t):id(id_t){ //id為常變數 需要在成員初始化列表中進行初始化 注:成員初始化列表只能在建構函式中使用

for(int i=0;i

假設有如下**:

base s1(1001);

s1.show(); //good!

s1.setvalue(1,6); //good!

s1.show(); //good!

const base s2(1002);

s2.show(); //good!

s2.setvalue(1,8); //error!

s1為非const物件 所以呼叫該物件的任何成員函式都是合法的 並且setvalue()是非const成員函式所以也可以對該物件進行修改

s2是加了const修飾符的物件 所以該物件是不允許修改的 而且只能呼叫const成員函式 非const成員函式不允許呼叫,因為上面說了,物件本身是不允許修改的,而const成員函式本身也進行約束了不修改呼叫物件,所以符合const物件要求,但是非const成員函式,因為他沒有加const進行修飾 所以可以對呼叫物件進行修改 這將違背const物件的意願,編譯器是不允許這麼做的。

然後 上面**中出現的 static const int size = 5;這是在類中定義常量的一種方式,還有一種方式是通過enum定義列舉常量,static也是一種修飾符。

static const 和enum定義的常量乙個主要區別就是 static const 是分配儲存空間的,而enum定義的不分配,所以static const常量是可以對其進行取位址的,而enum則不允許!

在某些東西宣告為const還可以幫助編譯器進行偵測錯誤用法 在這裡就不挨個講述了。

寫這篇文章主要是為了整理好後幫助記憶,因為const有很多種用法,稍有不慎就可能導致錯誤,當然掌握好了const的用法也會對程式設計有很大的幫助,還有就是為了幫助其他對const不是很了解的人,最後如果文章中寫的有哪些問題的話,也麻煩指出來,共同進步,非常感謝!

C C 中的const修飾符用法總結

const的基本含義 所以,const修飾符的作用主要是利用編譯器幫助我們檢查自己 的正確性。我們使用const在原始碼中標示出 不應該改變 的地方,然後利用編譯器,幫助我們檢查這些地方是否真的沒有被改變過。如果我們不小心去修改了這些地方,編譯器就會報錯,從而幫助我們糾正錯誤。使用const和不使用...

const 修飾符在C C 中的作用

有稍修改 1.1.1.定義普通常量 const double pi 3.1414926 const int pool size 20 定義常量有三種方法 巨集 const enum 其中巨集應該盡量避免,而 const 與enum 也各有優缺點,最大的區別就是 enum 只能用於定義包括0的正整數,...

C 中const修飾符

const只對它左邊的東西起作用 唯一的例外就是const本身就是最左邊的修飾符,那麼它才會對右邊的東西起作用。指標常量 關鍵字順序為 const 和中文順序一致 例如 int const a,表示指標a是乙個常量,初始化後不可更改 永遠指向某個物件 但是指向的物件的值可以修改,如 a 10 常量指...