Re: [問題] 關於c++11 ctor行為
看板C_and_CPP (C/C++)作者loveflames (咕啾咕啾魔法陣)時間7年前 (2018/06/24 13:11)推噓3(3推 0噓 6→)留言9則, 4人參與討論串2/2 (看更多)
以前剛好有研究過這個
NRVO:
1.啟動條件,缺一不可
return語句為非靜態之物件名稱
物件與函數返回類型相同,忽略CV修飾
該物件非函數的參數
2.符合以上條件時可省略ctor的呼叫,特別注意以下事項
copy語意仍在
屬於implementation-defined
3.阻止NRVO的情況
物件類型與函數返回類型不同,例如兩種類型有繼承關係時
涉及if/else這種條件分支
return語句不是"物件名稱",例如reference(非物件)、三元運算子、物件成員、指標指
向的內容
RVO:
1.啟動條件
以prvalue初始相同類型時,忽略CV修飾
2.符合以上條件時可省略ctor的呼叫,特別注意以下事項
copy語意仍在
屬於implementation-defined,僅存在C++17以前的版本
guaranteed copy elision:
1.啟動條件
以prvalue初始相同類型時,忽略CV修飾
2.符合以上條件時可省略ctor的呼叫,特別注意以下事項
無copy語意
屬於standard,C++17以後才有
move ctor:
1.啟動條件,擇一即可
用std::move包起來
return語句為非靜態之物件名稱
return語句為prvalue
2.符合以上條件時可呼叫move ctor,特別注意以下事項
有NRVO、RVO、guaranteed copy elision時不考慮這個
3.阻止move的情況,此時會呼叫copy ctor
所選ctor的參數類型不是該變數類型的rvalue ref時,以lvalue重新選擇(兩類型有繼承
關係時發生)
物件不可為const,因為T(T&&)不吃const
return語句不是"物件名稱",例如reference(非物件)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 110.50.186.132
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1529817114.A.F5B.html
※ 編輯: loveflames (110.50.186.132), 06/24/2018 13:56:45
推
06/24 14:26,
7年前
, 1F
06/24 14:26, 1F
推
06/24 16:23,
7年前
, 2F
06/24 16:23, 2F
→
06/24 16:24,
7年前
, 3F
06/24 16:24, 3F
→
06/24 16:28,
7年前
, 4F
06/24 16:28, 4F
→
06/24 17:09,
7年前
, 5F
06/24 17:09, 5F
改一下原文用語
※ 編輯: loveflames (110.50.186.132), 06/24/2018 19:57:18
→
06/24 23:46,
7年前
, 6F
06/24 23:46, 6F
→
06/24 23:48,
7年前
, 7F
06/24 23:48, 7F
→
06/24 23:48,
7年前
, 8F
06/24 23:48, 8F
推
06/25 04:19,
7年前
, 9F
06/25 04:19, 9F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
6
51
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章