C 之const用法解惑

2021-09-02 17:39:07 字數 1488 閱讀 4651

首先,說下最基本的const用途:

case1:const修飾變數,表示是常量,程式中不能更改,存放在常量儲存區。

例如:

const int a = 100;
case2:const修飾函式形參,表示傳入的引數在函式內部不能修改。例如:

class test

};

case3:非靜態成員函式後置const,表示成員函式隱含傳入的this指標是const指標。那麼在該成員函式裡,任何修改它所在類的成員的操作都是不允許的!注意:後置const只能加在非靜態成員函式後,加到*非成員函式

或者靜態成員*後面都是錯誤的。

例如:

class test

bool operator == (const test& obj) const

}

先看個例子

// test.cpp

#include #include using namespace std;

class test

test(int num)

test(const test& obj)

~test()

bool operator == (const test& obj) };

int main()

// compile cmd

// g++ -g test.cpp -o test

這個編譯不會有錯,即便==的過載函式沒有加後置const,編譯也沒有錯。

但是再看下面乙個例子

// test.cpp

#include #include using namespace std;

class test

test(int num)

test(const test& obj)

~test()

bool operator == (const test& obj) };

int main()

// compile cmd

// g++ -g test.cpp -o test

這個編譯就出錯了,如下:

當使用了std裡的一些模板類,比如(list、set、vector等等),如果沒有嚴格加後置const,那麼編譯就會出錯,因為list的==過載函式要求都是const型別,而test類的==過載函式不指定後置const的話,無法確定在test的==過載函式會不會修改test的成員。

1、如果乙個非靜態成員函式不會修改該類的成員變數,都強制加一下後置const。

2、如果傳入函式的引數在函式內部不會修改的話,函式引數也應該加上const修飾。

const用法的解惑

引用自 雖然看過c 方面不少的資料,但我現在仍然是乙個初學者,編過c 的一些程式,但不多。const修飾詞做為c 乙個重要的概念,務必要弄清楚才行,看到網上乙個c 學習者的部落格上歸納的很不錯,很精煉。以下是參考的鏈結 html const是c 的關鍵字之一,與其他的關鍵字相比,c 初學者可能對於c...

C 基礎之const基礎用法

前世 下列 for 迴圈語句有兩個問題,兩個都和使用 512 作為迴圈上界有關。for int index 0 index 512 index 第乙個問題是程式的可讀性。比較 index 與 512 有什麼意思呢?迴圈在做什麼呢?也就是說 512 作用何在?第二個問題是程式的可維護性。假設這個程式非...

C 之const關鍵字用法

c const 允許指定乙個語義約束,編譯器會強制實施這個約束,允許程式設計師告訴編譯器某值是保持不變的。只有乙個const,如果const位於 左側,表示指標所指資料是常量,不能通過解引用修改該資料 指標本身是變數,但可以指向其他的記憶體單元。等價於 const int p int const p...