C++ const修飾符

    const修飾符可以修飾指針、數據成員、成員函數和類對象。接下來分別進行解釋:

1.修飾指針

    const 對象一旦創建就不能改變,所以const對象必須初始化。可以是任意的表達式;

    const int i = get_size();   //true
    const int j = 42;           //true
    const int k;                //false

(1)指針常量    

    例如:int a = 10; int * const p = &a; 

     const 修飾的是p這個指針,所以是指針常量,指針的地址不能改變,但是指針的內容可以改變。

    int a = 10;
    int b = 299;
    int* const p = &a;
    a = 999;       // true 可以通過原來的變量修改值
    *p = 100;      // true
    p = &b;        // false

 

(2)常量指針

 

    例如:int a = 10; const int *p = &a;(或 int const *p = &a;)

const 修飾的是其類型,指針指向的值不可改變,但是可以改變p的地址,因爲p這裏是一個變量。 

    int a = 10;
    int b = 299;
    int const *p = &a;
    p = &b;      // true
    a = 999;     // true
    *p = 300;    // false

(3)指向常量的指針常量

    這個就比較簡單了,地址和值都不能改變,如下所示:

    int a = 10;
    const int* const p = &a;

2.修飾數據成員

    修飾數據成員的時候,初始化只能在參數列表裏,被const修飾的數據成員,不能被修改。如下代碼所示:

class Const_test{
public:
    Const_test(int v):value(v){
        
    }
private:
    const int value;
};

3.修飾成員函數

    const放置的位置 : 函數聲明之後,實現體之前。要求在聲明和定義處都要有const修飾。const所修飾的成員函數能訪問const和非const數據成員,但不能修改非const數據成員,只能訪問const成員函數,不能訪問非const成員函數。   

    構成重載:const對象只能調用const成員函數。非const成員對象,優先調用非const成員函數,若無,則可調用const成員函數。

class Const_test{
public:
    Const_test(int v):value(v){

    }
    void display()const{
        age = 10;   //錯誤
        int temp = 10; //正確
        temp = age;
        print();//錯誤
    }
    void dispaly(){//重載

    }

    void print(){

    }

private:
    int age;
    const int value;
};

4.修飾類對象

    const修飾函數,是從函數層面,不修改數據。const修飾對象,是從對象的層面,不修改數據。只能調用const成員函數。

 

 

 

發佈了274 篇原創文章 · 獲贊 50 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章