PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
Re: [問題] 關於c++11 ctor行為
作者:
loveflames
(咕啾咕啾魔法陣)
2018-06-24 13:11:51
以前剛好有研究過這個
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(非物件)
作者:
ilikekotomi
(Young)
2018-06-24 14:26:00
感謝整理
作者:
a58524andy
(a58524andy)
2018-06-24 16:23:00
感謝整理 總之Q2中g把吃進來的rvalue ref當成xvalue但是這個xvalue還是一個reference,因此不會用mv ctor比較不懂的是copy semantics的保留與否是甚麼意思呢?
作者: firose (guest也是也是也是也是也)
2018-06-24 17:09:00
就是需不需要存在的意思 你要先能存取才能 copy elision
作者:
a58524andy
(a58524andy)
2018-06-24 23:46:00
喔喔
https://goo.gl/8vVaVX
另參照這裡 總之c++17對於部分寫法直接當作沒有copy這個語意存在了感謝提點
作者:
KanzakiHAria
(神崎・H・アリア)
2018-06-25 04:19:00
也太複雜XD
繼續閱讀
[問題]關於陣列字串回傳主程式的問題
hunkchen2016
[問題] 關於c++11 ctor行為
a58524andy
[問題] 請問有關於 C 程式的介面設計
gowrite
Re: [問題] template class 內 static 初始問題
sarafciel
[問題] 模擬記憶體大小
s0972584
[問題] C的讀檔問題
mjforever
[問題] template class 內 static 初始問題
lovejomi
[問題] opencv存圖片時,一直發生錯誤
ponwar87123
[問題] map insert錯誤問題
waquey
[問題] switch控制與while
Ruid
Links
booklink
Contact Us: admin [ a t ] ucptt.com