作者archon (三腳貓的把戲)
看板C_and_CPP
標題Re: [問題] 關於函數const 的問題~(搞不清楚)
時間Thu Oct 15 21:47:39 2009
爬文的時候翻到這一則文章在討 const 跟 function overload...
主角是這兩個
Box& TruckLoad::operator[](int index)
Const Box& TruckLoad::operator[](int index) const
我能理解第二個最末端那個 const 修飾了隱藏的 this,
導致在函式執行時不會動到 member varible...
但是,實際使用上,引用的參數還是 int index,兩個一樣,
要怎麼區別哪一個 member function 會被呼叫到?
有沒有前輩能給個例子,
說明一下什麼情況下是第一個被叫到,什麼時候會用到第二個呢?
※ 引述《DarkNT (紐太)》之銘言:
: ※ 引述《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會告訴你錯誤。
--
追根究底所得到的東西,是失望的觀眾,以及狼狽的魔術師...
De'Ring Practice
http://www.wretch.cc/blog/miauwally/21246514
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.45.179.4
推 QQ29:看你左值是不是const 10/15 21:59
推 QQ29:可爬這篇 10/15 22:01
→ QQ29:16700 littleshan 大的文章 10/15 22:01
→ archon:誠好文,我琢磨一下~~~ 謝謝 <(_ _)> 10/15 22:17