下午在調程式時,遇到error: passing 『$class_name
『 as 『this』 argument of 『$class_function『 discards qualifiers的編譯的錯誤,
錯誤的意思是 this指標在作為引數傳入class_function時限定符被取消了
google一下,是這個函式需要用const修飾,而我漏了,因而報了這個編譯錯誤。
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 = ***;是非法的
(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修飾
C 中const關鍵詞總結
下午在調程式時,遇到 error passing class name as this argument of class function discards qualifiers的編譯的錯誤,錯誤的意思是 this指標在作為引數傳入class function時限定符被取消了 google一下,是...
C 中的const關鍵詞用法
cont int i 5 i 8 此處會產生編譯錯誤,因為i被const修飾,因此i的值不能再改變 同樣地,const除了可以修飾基本型別資料外,還可以用來修飾指標和引用,但修飾指標的時候會有常量指標和指標常量之分 const int p 此處是乙個常量指標,從左往右讀,先是常量再是指標。對於對於常...
常量關鍵詞const
可以用const修飾符號常量。const double pi 3.14 const int i和int const i是一樣的 也可以用const限定指標,但是限制指標時有幾個需要注意的地方。1 const修飾的位置 const int i,此時效果等同於int const i 可以這麼看,先把co...