作者aldreamp (小孟)
看板EE_DSnP
標題Re: [問題] overloading *
時間Tue Dec 7 17:45:59 2010
※ 引述《CocoGrisp (快腿正姊摳摳李玟)》之銘言:
: 想請問老師要我們 overload *
: 給了兩個形式
(A.) 其中一個是 const method const T& operator * () const {}
(B.) 另外一個是 T& operator * () {}
: 為什麼要兩種呢 ?
: 想不太出來會有哪兩種不一樣的情況呼叫到 "*"
: 如果只是 dereference 的話
: 應該都不會改到原本 iterator 的資料吧
: 煩請老師或同學們指點了
: 謝謝
: 推 GriffeyKao:看起來一個是在左邊呼叫 另一個在右邊呼叫 05/13 16:13
→ GriffeyKao:例如 int* p; int a = *p; *p = 10; 這樣不知對不對? 05/13 16:14
: 推 bnsblue:茪W說得沒錯 05/13 17:26
: → bnsblue:樓上↑XD怎麼會出現亂碼 05/13 17:27
推 danielko:記得老師說const的version比較快? 05/13 17:30
→ danielko:所以compiler在可以選的時候會先用 05/13 17:31
: → CocoGrisp:thx ! 05/13 17:36
看不太懂前人的討論文 想請問大家這篇討論文是這樣的意思嗎?
(CALL 1.)int a = *p;
會去呼叫 const method const T& operator * () const {}
(CALL 2.)*p = 10;
會去呼叫T& operator * () {}
而原因是const定義的method(A.)比較快,所以compiler在呼叫時會優先選有const的(A.)?
所以執行(CALL 1.)時用有const的(A.),而執行(CALL 2.)因為內容會被改變,所以用(B.)
沒有const的
那 請問(CALL 1.) 跟 (CALL 2.) 是不是都回傳同樣的資料
只是分別是 讀與寫 的差別而已?
請問我這樣解釋對嗎??
謝謝大家QQ
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.94.109
※ 編輯: aldreamp 來自: 140.112.94.109 (12/07 18:16)
1F:推 ric2k1:晚一點來會,lecture note 趕工中... 12/07 23:31