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