作者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