C++中const關鍵詞總結

下午在調程序時,遇到 error: passing ‘$class_name‘ as ‘this’ argument of ‘$class_function‘ discards qualifiers的編譯的錯誤,

錯誤的意思是 this指針在作爲參數傳入class_function時限定符被取消了

google一下,是這個函數需要用const修飾,而我漏了,因而報了這個編譯錯誤。


順便將const關鍵詞在C++中的使用總結一下。


const, constant的縮寫,想必大家在第一堂C/C++課程的時候,老師們都是這麼解釋的“const 就是常量的意思,可以避免減少程序中的魔數(magic number)”。其實,這是對const最大的誤解,以至於多年來大家見到const就想到在文件前幾行的定義的常變量。


const在C++中的使用歸納爲

     const對變量的修飾

     cosnt對指針的修飾

     const對函數的修飾


一. const對變量的修飾

      const int MAX_SIZE = 1024;

     這是最常見的用法,大家都沒問題, const在定義的時候需要初始化。

     有兩點需要注意一下:

     a) const變量默認是局部變量,如果需要全局訪問,需要顯示地extern

     b) const int MAX_SIZE = 1024 與 #define MAX_SIZE1024 貌似做了相同的事情,但是是完全不同的兩個同意。

         #define作爲宏定義是完全文本替換,而const MAX_SIZE是作爲一個變量整體的。

          下面這段代碼可以說得更清楚:

              const int MAX_SIZE = 1 << 10;//    #define MAX_SIZE 1<<10

               cout << MAX_SIZE << std;


二. const對指針的修飾

     const int * a = &b;           (1)

     int const * a = &b;           (2)

     int * const a = &b;           (3)

     const int * const a = &b;  (4)

     (1)(2)的含義是相同的,表示指針所指的內存空間不可修改. *a = XXX;是非法的

     (3)表示指針不可修改,a++是非法的;

     (4)表示指針和指針內容都不可修改

     

三. const對函數的修飾

       void fun(const int &r) (1) 與int const相同

       void fun() const          (2)

       const int fun()             (3)

     (1)  函數的參數爲const,表示函數不可修改參數的值

     (2)  函數加const後綴, 此時的函數爲自定義結構(struct,class)的成員函數,表示該函數成員不可修改class的成員變量

     (3)  函數的返回結果爲const

            表示返回的結果不可修改,返回結果只能賦值給const修飾的變量


 

幾點經驗:

1)對const變量採用統一的編碼風格能減少一些不必要的錯誤

2)給函數傳參時,儘量使用帶const的引用方式

3)返回結果迫不得已才使用const修飾

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章