Re: [問題] 關於 return reference

作者: uranusjr (←這人是超級笨蛋)   2014-05-19 20:31:36
※ 引述《wowslr (檸檬子)》之銘言:
推 kwpn:因為const IDrive& getDrive()回傳const reference 05/19 12:39
→ kwpn:但foo(IDrive &drive)想要的是non-const 05/19 12:41
→ wowslr:所以這種情況我應該要提供 non-const 和 const 兩個版本? 05/19 14:31
→ CaptainH:或許 foo 的引數可以設計成 const IDrive & 05/19 15:31
→ CaptainH:或是IDrive&& 05/19 15:32
這看你究竟想做什麼而定
傳入參考作為引數隱含著函數本身會改變該引數內部值的概念
如果 foo 不會修改傳進去的 drive, 那麼就可以讓它直接接受 const IDrive &
這樣在函數語義上也會比較清晰
反之如果 foo 會修改 drive, 那麼當然你就必須為它提供 non-const 版本的 getter
作者: kwpn (ITSST)   2014-05-19 12:39:00
因為const IDrive& getDrive()回傳const reference但foo(IDrive &drive)想要的是non-const
作者: wowslr (平凡姜太公)   2014-05-19 14:31:00
所以這種情況我應該要提供 non-const 和 const 兩個版本?
作者: CaptainH (Cannon)   2014-05-19 15:31:00
或許 foo 的引數可以設計成 const IDrive &或是IDrive&&
作者: johnhmj (耗呆肥羊)   2014-05-19 22:11:00
啊...原來他是在問這個問題呀 我想得太複雜惹
作者: wowslr (平凡姜太公)   2014-05-19 22:30:00
我想問一下,一般在設計 getter ,如果沒有特別需要 const也都是提供const和non-const兩個版本嗎?或是有其他寫法?
作者: xacid ( )   2014-05-20 02:43:00
如果是回傳ref/ptr to member,我都直接提供none-const因為傳出去就是為了方便而破壞封裝,有沒有const差不多
作者: LPH66 (-6.2598534e+18f)   2014-05-20 08:15:00
相對的如果是以值回傳的話則通常會掛 const(我是指 const member function) 這樣方便使用
作者: kingofsdtw (不能閒下來!!)   2014-05-20 11:27:00
請問一下FOO是啥@@?
作者: MOONRAKER (㊣牛鶴鰻毛人)   2014-05-20 11:33:00
foo是電腦語言界的小明 foo()就是小明函數
作者: Killercat (殺人貓™)   2014-05-20 13:36:00
原來有人回了 我會建議提供兩個getter這樣要debug會有意想不到的妙用
作者: uranusjr (←這人是超級笨蛋)   2014-05-20 14:06:00
以我個人而言, 不是「沒有特別需要 const」就不加, 而是相反, 如果可以的話儘量用 const & 或者直接傳值, 除非必要才會把 const 拿掉傳 non-const 參考或 pointer
作者: Debians   2014-05-20 16:22:00
k大 是指什麼樣的妙用?
作者: Killercat (殺人貓™)   2014-05-22 17:26:00
妙用在於你可以在兩個getter各設一個break point或者log 可以清楚的知道一些native type call flow是不是call到錯誤的 或者用到非預期的member invoke這滿難講清楚的 不過碰過一次就知道我意思了 XD

Links booklink

Contact Us: admin [ a t ] ucptt.com