精華區beta civil91 關於我們 聯絡資訊
※ 引述《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
jvincent:講的好!這個疑問也困擾我很久了!XD 06/17 20:03