推 jvincent:講的好!這個疑問也困擾我很久了!XD 06/17 20:03
※ 引述《fuha (mimi)》之銘言:
: 現在還在了解多載 operator的問題
: 書本上有一個部分看不是很懂
: 小節的標題是 lvalue and overloading subscript operator
: 它的意思想要實現
: load[0] = load[1]
: 於是 overloading 了
: % Box 和 TruckLoad 都是物件
: Box& TruckLoad::operator[](int index)
: Const Box& TruckLoad::operator[](int index) const
: 不懂的部分是 第二個 function 最後為何要有 const
: 以及實際上運作的原理是如何?
: 希望各位高手多多指教
把一個class的member function宣告const,比如說:
class A {
public:
void B() const ;
};
的意思是這個member function不會修改member variable。
同時也代表這個member function只能呼叫不會修改member variable
的operator或是function (後面有加const的function)。
現在回到這個問題,為什麼第二個function要在後面加上const,
一個原因是因為兩個funciton都接受一樣的變數,所以不加complier
沒辦法區別。第二個理由,第二個function回傳的是一個const的
reference,所以不會修改到member variable,所以加上const可以
給其他const的function呼叫,complier會依照function的定義去判斷
要呼叫哪一個。
在member function加上const其實蠻有用的,可以有效的避免不少錯誤,
尤其是當你確定你這個member function不會改變member variable的時候,
因為當可以請complier幫你check錯誤的時候,何必自己處理呢?
PS. 如果你在const的function裡面呼叫non-const的function或是修改到
member variable,complier會告訴你錯誤。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.246.83