看板 C_and_CPP 關於我們 聯絡資訊
請問 overloading = 回傳需要& 嗎? 也就是 XXX & XXX::operator = (parameter list) //XXX:某個class 這裡 ******************************** 就算是A=B=C; B=C的結果也會是r-value 不會是l-value 為什麼還要 & 還是可以不必? 那要的原因又是什麼呢? 謝謝>"< -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.22.26
loveme00835:通常copy assignment & copy ctor 要一起實作, 不然編 05/11 17:51
loveme00835:譯器預設是用 member-wise的方式一個一個複製出新的 05/11 17:51
loveme00835:物件, 參考程式碼: http://tinyurl.com/262k5cy , 雖 05/11 17:53
loveme00835:然回傳值也是可以, 但是在物件很龐大的時候速度將會 05/11 17:53
m13m13m:大哥...可以白話一點嗎... 小弟看不太懂您說的....... 05/11 17:54
m13m13m:也就是說也可以不加 & 就是了 但是一般來說因為某些原因 05/11 17:55
m13m13m:如您所述 所以我們要加? 05/11 17:55
loveme00835:很慢, 假如用這個語法 : http://tinyurl.com/2bob7h8 05/11 17:56
loveme00835:因為你產生了複製出來的(暫時)物件, 在分號結束就解構 05/11 17:57
loveme00835:產生的行為將會是未定義的, 覆寫運算子的時候必須考慮 05/11 17:58
loveme00835:到所有可能的用法, 不然產生錯誤也不知道, 為了符合內 05/11 17:59
loveme00835:建運算子的語法, 以及為了速度考慮, 管理的考量(不要 05/11 18:00
loveme00835:隱含呼叫其他函式), 所以都該回傳參考 05/11 18:01
m13m13m:那請問您(你好強xd...) 哪些operator的overloading return 05/11 18:04
m13m13m:應該要是 reference? 05/11 18:04
m13m13m:我知道有>> << 05/11 18:04
loveme00835:http://tinyurl.com/2cdkk3a 05/11 18:08
tinlans:通常都是你想 return *this 的狀況下才會 return ref。 05/11 18:14
tinlans:其它你不會想 return *this 的狀況,return ref 通常也不 05/11 18:15
tinlans:合法,所以你一看就會知道不是 return ref。 05/11 18:15
m13m13m:Oh~ Thank you! 沒想到wiki 這麼好用.......我好蠢....... 05/11 18:16