const
作用:防止定義的變數or物件再次被修改
注意:const修飾的變數必須在定義時初始化,(當作為類的資料成員時例外)
用法如下:
1:修飾整個函式(常函式):防止修改非static成員變數
//常函式作用:防止修改非靜態(static)成員變數
//即static成員變數可以改變,其他變數無法改變
class example
};
2:修飾指標:防止*ptr或者ptr被修改
const出現在*的左邊,*ptr無法改變
出現在*的右邊,ptr 無法改變
//修飾指標
int a = 0;
int b = 0;
const int *ptr = &a;//修飾*ptr:不能通過*ptr改變a的值 *ptr = 10錯誤
int const *ptr = &a;//修飾*ptr:不能通過*ptr改變a的值 *ptr = 10錯誤
int *const ptr = &a;//修飾ptr :不能改變ptr的指向 ptr = &b錯誤
const int* const ptr = &a;//*ptr以及ptr都無法改變
3:修飾函式返回值:防止函式返回值被改變
int &c = max(a,b)錯誤//修飾返回值
const int max(int &a, int &b)
const int &c = max(a,b)正確
4:修飾函式引數:當以引用或者指標傳遞函式引數時,如果函式引數不想被改變,可以加const保護
char *strcpy(const char *src, char *dest)
5:修飾變數:防止變數被修改
const int b = 0;
b = 10;//錯誤
6:修飾類的資料成員
定義類時無法初始化資料成員,因為編譯器不為類分配儲存空間,定義物件時才會分配儲存空間,const不是要在定義時初始化麼,那麼該怎麼辦呢??
const修飾的變數作為類的資料成員時,只能通過建構函式初始化,非靜態資料成員無法在類外初始化
類的靜態資料成員只能在類外初始化
class example
;//以上定義都是錯誤的
class example
;static int c = 0;
example::example(int x, int y) :a(x), b(y){}
int main()
7:節約記憶體空間,
const定義的變數, 系統只為它分配一次記憶體, 而使用#define定義的常量巨集, 定義幾次分配幾次, 這樣const就很節約空間
#define pi 3.14 //使用#define巨集
const double pi = 3.14; //使用const,這時候pi並沒有放入記憶體中
double a = pi; //這時候才為pi分配記憶體,不過後面再有這樣的定義也不會再分配記憶體
double b = pi; //不會再分配記憶體,
double c = pi; //編譯時分配內
double d = pi; //編譯時再分配記憶體
8:const定義的變數只能作用於定義它的該檔案, 不能被該程式的其他c/c++檔案呼叫,
如file1.cpp中 const int val;
在file2.cpp中, extern int val; //錯誤,無法呼叫,
要想const定義的變數能被其他檔案呼叫, 定義時必須使用extern修飾
如file1.cpp中 extern const int val = 10;
在file2.cpp中 extern const int val; //正確,可以呼叫,
非const變數預設為extern, 要使const修飾的變數能被其他檔案訪問必須顯示指定為extern
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指向 的記憶體不可改變,...
const關鍵字的用法
一 概述 被const修飾的變數都是唯讀的,當你的程式改變其值的時候,編譯器會報錯。const一般用來修飾變數,函式的引數,返回值和函式本身等。1.1 修飾變數 const int a 10 定義乙個const的int變數 const char p hello world const字串 char ...