const 放在 member function 的後面
const 放前面與後面的意義
- 放前面:代表回傳值是 const 的。
1 | const int foo() { } |
- 放後面:僅出現在成員函數,代表函數不會改變呼叫者的值;目的是確保 const 的物件不會因為呼叫了某個 function 而變化。
1 | int foo() const { } |
光文字敘述可能不太清楚,下面來舉栗子。
例子
我宣告了一個 class Dick
,裡面只有 int length
代表的長度。
因為ㄐㄐ會喵喵叫跟啪啪啪,所以另外有兩個 function meow(const Dick& b)
和 fuck()
,其中 meow
裡面的 const Dick& b
會呼叫 fuck()
。
先來試試看如果讓 const 的 b 呼叫非 const 的 fuck 會怎樣:
1 |
|
編譯器馬上噴錯
1 | error: passing 'const Dick' as 'this' argument discards qualifiers [-fpermissive] |
把 const 加上去:
1 |
|
恩,成功印出 70!
再來試試看如果在一般的函數後面加上 const 會怎樣:
1 | int woof() const { return 55555; } |
編譯器噴錯:
1 | error: non-member function 'int woof()' cannot have cv-qualifier |
寫在後面
記得第一次遇到這個問題是為了要用 priority queue 而重載 operator<()
,必須讓它 const 否則會報錯。至於後來幾次應該都是為了傳 const reference 的參數進 function(也就是範例的形式)。
stackoverflow 上的這篇講的還蠻清楚的,但中文資源到底在供三小我是看沒有,於是寫了這篇,希望這樣夠直白明瞭。
2018年6月1日