Re: 關於return 一個 reference 的問題~
※ 引述《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
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章