關鍵字const用法詳解

2021-05-25 19:38:27 字數 1768 閱讀 9960

摘自:

物件導向是c++的重要特性,但是c++在c的基礎上新增加的幾點優化也是很耀眼的 。

以下幾點很重要,學不好後果會很嚴重

const 限定符

1. 宣告變數只能被讀

const int i=5;

int j=0;

...

i=j;  //非法,導致編譯錯誤

j=i;  //合法

2. 必須初始化

const int i=5;    //合法

const int j;      //非法,導致編譯錯誤

3. 在另一連線檔案中引用const常量

extern const int i;    //合法

extern const int j=10;  //非法,常量不可以被再次賦值

4. 便於進行型別檢查

用const方法可以使編譯器對處理內容有更多了解。

#define i=10

const long &i=10; 

char h=i;      //沒有錯

char h=i;      //編譯警告,可能由於數的截短帶來錯誤賦值。

5. 可以避免不必要的記憶體分配

#define string "abcdefghijklmn/n"

const char string="abcdefghijklm/n";

...

printf(string);  //為string分配了第一次記憶體

printf(string);  //為string一次分配了記憶體,以後不再分配

...

printf(string);  //為string分配了第二次記憶體

printf(string);

...

由於const定義常量從彙編的角度來看,只是給出了對應的記憶體位址,

而不是象#define一樣給出的是立即數,所以,const定義的常量在

程式執行過程中只有乙份拷貝,而#define定義的常量在記憶體中有

若干個拷貝。

6. 可以通過函式對常量進行初始化

int value();

const int i=value(); 

假定對rom編寫程式時,由於目標**的不可改寫, 本語句將會無效,不過可以變通一下:

const int &i=value();

只要令i的位址處於rom之外,即可實現:i通過函式初始化,而其值不會被修改。

7. 是不是const的常量值一定不可以被修改呢?

觀察以下一段**:

const int i=0;

int *p=(int*)&i;

p=100;

通過強制型別轉換,將位址賦給變數,再作修改即可以改變const常量值。

8. 請分清數值常量和指標常量,以下宣告頗為玩味:

int ii=0;

const int i=0;            //i是常量,i的值不會被修改

const int *p1i=&i;        //指標p1i所指內容是常量,可以不初始化

int  * const p2i=ⅈ    //指標p2i是常量,所指內容可修改

const int * const p3i=&i; //指標p3i是常量,所指內容也是常量

p1i=ⅈ                  //合法

*p2i=100;                //合法

上面只提到了const的部分用法,具體請參看上方的**。

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 1 用關鍵字const定義變數指所定義的常量。即恆定的變數,即不可改變的變數。例 const int i 10 此時 i 就是乙個整型的常量,其值不能改變。在c 中如果用const定義乙個物件,那麼物件中的成員變數就是常數,不能改變 只能為初始化的值 如果用const定義類中的成員...