[問題] 一個關於 NRV Optimization的問題

看板C_and_CPP (C/C++)作者 (老王)時間13年前 (2012/08/20 22:26), 編輯推噓1(107)
留言8則, 3人參與, 最新討論串1/1
在深度探索C++物件模型一書中 2.3節有提到 NRV Optimization 有一個地方不是很了解 就是為什麼要有copy constructor才能實施此最佳化 以下是書上寫得轉化過程 但是好像也沒看到copy constructor 謝謝 // 原始碼 X bar() { X xx; // ... 處理 xx return xx; } // 轉化後 void bar(X &__result) { // default constructor被喚起 // C++虛擬碼 __result.X::X(); // ... 直接處理 __result return; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.251.216.237

08/20 22:45, , 1F
第一個使用了 cp ctor,第二個使用 ref 所以 No Returen Val
08/20 22:45, 1F

08/20 22:47, , 2F
少呼叫一次複製、一次建構
08/20 22:47, 2F

08/20 23:02, , 3F
第二個有NRV最佳化 但是看起來並不需要cp ctor
08/20 23:02, 3F

08/20 23:03, , 4F
可是書上寫 要有cp ctor 才能實施NRV最佳化
08/20 23:03, 4F

08/20 23:03, , 5F
照理來說這程式要用第一個方式執行, 但標準有特別說在這時
08/20 23:03, 5F

08/20 23:04, , 6F
可以使用第二種方式執行, 不過那也只是"可以"不是"一定"
08/20 23:04, 6F

08/20 23:04, , 7F
所以這是在保證即使編譯器不使用 RVO 時也能編譯的限制
08/20 23:04, 7F

08/21 18:35, , 8F
謝謝各位回答
08/21 18:35, 8F
文章代碼(AID): #1GCaaWry (C_and_CPP)
文章代碼(AID): #1GCaaWry (C_and_CPP)