[問題] 關於Rvalue與RVO
------
#先說明,回傳時通常傳參考就沒這些問題,故意這樣寫只是想搞懂
現在覺得C++好難= =,腦袋已經混亂了,求指點明晰
------
最近學到move constructor以後,看了看Rvalue的定義,試了下code,
發現VC++與G++的行為不同,下面有我寫的簡單的code,希望能得到解
答,如果不好回答,希望能有連結或關鍵字讓我查詢。
我猜可能是function return object沒學好,先舉例說明我的想法:
class A{
A& append(int value){
//...append value to A
return *this;
}
A(const A& a){
//...copy a to *this
}
}
A a;
A b = a.append(1);
以上面這行來說,會有兩個動作
1.使用a.append(1)時的return,
A& temp = *this;
2.使用b.A(const A& a)時,
const A& a = temp;
如果對的話往下看才有意義,我下面的傳參數
都是靠這個邏輯傳的。
接下來看code:
https://pastebin.com/rx9xuAa3
附上VC++與G++的截圖結果。
左邊是VisualStudio2019,右邊是G++7.2.0。
https://i.imgur.com/6pn0XzZ.png

以這個例子來說,我覺得兩者output都不對= ="
我認為的答案如下:
Constructor a //A b(objName);
Deep copy when initial. //A temp = b; return時
Destructor a //出copy()時,解構a
------------------------------------
Constructor b //A b(objName);
Shadow copy when initial.//A temp = b; RVO的關係,改成move
Deep copy when initial. //A c(temp); 用C來初始化建構
------------------------------------
//main結束時全部解構
Destructor default //因為我複製時沒改到_objName,預設
Destructor a //最上面的a
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.83.72 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1617959898.A.4D0.html
※ 編輯: DeepFapping (118.163.83.72 臺灣), 04/09/2021 17:19:36
→
04/09 17:30,
4年前
, 1F
04/09 17:30, 1F
→
04/09 17:47,
4年前
, 2F
04/09 17:47, 2F
→
04/09 17:47,
4年前
, 3F
04/09 17:47, 3F
→
04/09 17:47,
4年前
, 4F
04/09 17:47, 4F
→
04/09 17:47,
4年前
, 5F
04/09 17:47, 5F
→
04/09 18:08,
4年前
, 6F
04/09 18:08, 6F
推
04/09 18:29,
4年前
, 7F
04/09 18:29, 7F
推
04/10 06:30,
4年前
, 8F
04/10 06:30, 8F
→
04/10 06:30,
4年前
, 9F
04/10 06:30, 9F
→
04/10 06:31,
4年前
, 10F
04/10 06:31, 10F
→
04/10 13:53,
4年前
, 11F
04/10 13:53, 11F
→
04/10 19:24,
4年前
, 12F
04/10 19:24, 12F
→
04/10 19:28,
4年前
, 13F
04/10 19:28, 13F
→
04/10 19:30,
4年前
, 14F
04/10 19:30, 14F
→
04/10 19:30,
4年前
, 15F
04/10 19:30, 15F
→
04/20 12:31,
4年前
, 16F
04/20 12:31, 16F
推
04/20 15:21,
4年前
, 17F
04/20 15:21, 17F
→
04/20 15:23,
4年前
, 18F
04/20 15:23, 18F
→
04/20 15:27,
4年前
, 19F
04/20 15:27, 19F
→
04/20 15:28,
4年前
, 20F
04/20 15:28, 20F
→
04/20 15:33,
4年前
, 21F
04/20 15:33, 21F
→
04/20 15:33,
4年前
, 22F
04/20 15:33, 22F
→
04/20 15:34,
4年前
, 23F
04/20 15:34, 23F
→
04/20 15:43,
4年前
, 24F
04/20 15:43, 24F
→
04/20 15:43,
4年前
, 25F
04/20 15:43, 25F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章