贊助廠商

娛樂城推薦

首頁

刊登資訊

  • 刊登者:匿名
  • 時間:2021-06-06 00:00:12

尚未解答C/C++- 關於Rvalue與RVO

C/C++- 關於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:
以這個例子來說,我覺得兩者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

--

0個答案 C/C++- 關於Rvalue與RVO

其他問題

友站連結