作者khoguan (Khoguan Phuann)
看板C_and_CPP
标题Re: 关於return 一个 reference 的问题~
时间Fri May 6 17:13:45 2005
※ 引述《LPH66 (p2/LPH66欢迎光临)》之铭言:
: ※ 引述《virtu (骨董)》之铭言:
: : 请问一下,
: : 假设现在有一个物件
: : class Object
: : {
: : Object &operator=(Object o);
: : }
: : 然後有另一个物件
: : class funcclass
: : {
: : Object member;
: : Object fun1()
: : {
: : return member;
: : }
: : Object & fun2() // 多了个 &
: : {
: : return member;
: : }
: : }
: : 请问一下, func1 和 func2 有何不同?
: : 例如:
: : void main()
: : {
: : funcclass fc;
: : Object myobj1, myobj2;
: : myobj1 = fc.func1();
: : myobj2 = fc.func2();
: : }
: : 其中 myobj1 , myobj2 assign 值的过程如何?
: 上面没有差别
: 它们只有这个时候有差:
: fc.func1()=... //compile error
: fc.func2()=... //OK
: 加了个&的回传值和不加&的回传值只差在可以当左值
建议您真的下去编译看看。其实
Object myobj3;
fc.func1() = myobj3;
fc.func1() = Object();
等等写法,是不会 compile error 滴!也是可以执行滴。
只是这种写法是在做没意义的白工。
传回 Object 会产生暂时物件(程式中 member的复本而不是 member本身)。
它几乎都会在结束该expression之後消失,所以是做白工(除非又设个
const reference variable 指向它)。
class type 的 non-const temporary object 可以放在等号左边,
若是 const temporary object 则不行。至於 built-in type
的暂时物件则无论是否 const 都不能做 lvalue.
而传回 Object& 在上述的例子里,就是传回 Object member自身,
当它做 lvalue 时,member 这个 data member 的值就会被更动。
原po的code里面有不少错误,也建议先自行编译成功再贴上来。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.130.208.168