c++ const 允許指定乙個語義約束,編譯器會強制實施這個約束,允許程式設計師告訴編譯器某值是保持不變的。
只有乙個const,如果const位於 * 左側,表示指標所指資料是常量,不能通過解引用修改該資料;指標本身是變數,但可以指向其他的記憶體單元。等價於:
const int *p = int const *p;
只有乙個const,如果const位於*右側,表示指標本身是常量,不能指向其他記憶體位址;但指標所指的資料可以通過解引用修改。
int * const p;
兩個const,*左右各乙個,表示指標和指標所指資料都不能修改。
const int * const p;
const修飾的全域性變數預設為檔案區域性變數,即檔案外的函式無法通過extern使用它,若要使外部檔案也可以使用到它,可在它初始化時,使用extern修飾。例如:
extern const int a= 0;
2、const修飾函式引數
傳遞過來的引數在函式內不可以被修改。
const修飾的成員函式不能修改任何的成員變數(mutable修飾的變數除外),因為它修飾的其實是物件的this指標。
注意:const關鍵字不能與static關鍵字同時使用,因為static關鍵字修飾靜態成員函式,靜態成員函式不含有this指標,即不能例項化,const成員函式必須具體到某一例項。
include using namespace std;
class point
void testconstfunction(int _x) const
int x;
};
(1)指標傳遞
如果返回const data,non-const pointer,返回值也必須賦給const data,non-const pointer。因為指標指向的資料是常量不能修改。
1 const int * malloca()
5 6 int main()
7
(2)值傳遞
如果函式返回值採用「值傳遞方式」,由於函式會把返回值複製到外部臨時的儲存單元中,加const 修飾沒有任何價值。所以,對於值傳遞來說,加const沒有太多意義。
所以:不要把函式int getint(void) 寫成const int getint(void)。不要把函式a geta(void) 寫成const a geta(void),其中a 為使用者自定義的資料型別。
const關鍵字用法
1 const常量 如const int max 100 優點 const常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查,而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換時可能會產生意料不到的錯誤 邊際效應 2 const修飾類的資料成員 class a const...
const關鍵字用法
const修飾符表示該變數的值不能被改變。但得分兩種情況討論 修飾普通變數和修飾指標變數。1.普通常量 const int foo 5 表示foo不能再被賦值 foo 8 錯誤,因為foo是const修飾為不可變常量了 2.修飾指標 const char p test 表示p指向 的記憶體不可改變,...
C 之const關鍵字
函式與const 類與const 使用const關鍵字修飾的常量是唯讀的,在程式執行時不能更改。const關鍵字可以用在型別名前,也可以用在型別說明符後。常量 const double rate 0.069 const在型別名之前 const int amount 10 string const n...