[問題] 關於Rvalue與RVO

作者: DeepFapping (鳳凰)   2021-04-09 17:18:15
-
作者: nh60211as   2021-04-09 17:30:00
是不是還有Copy elision要考慮,我現在沒辦法測試
作者: DeepFapping (鳳凰)   2021-04-09 17:47:00
臥槽,剛查了一下,我沒學過這東西,所以這是編譯器優化的問題,設中斷點也看不到的結果,不知遇到這種問題要如何學習?感謝。以試過,g++結果跟Visual C++一樣了,但是仍然跟我想的不一樣= ="
作者: Lipraxde (Lipraxde)   2021-04-09 18:08:00
先從怎麼把所有相關的優化關掉開始學
作者: s4300026 (s4300026)   2021-04-09 18:29:00
左邊的啊
作者: g0010726 (Kevin)   2021-04-10 06:30:00
樓樓上說的關掉優化在c++17後應該也沒用了 有些rvo變成強制的 規則可以在cppreference翻一下抱歉 應該說 copy elision 比較準確
作者: Lipraxde (Lipraxde)   2021-04-10 13:53:00
是嗎?我有點忘記以前試的時候是不是用 c++17 了。
作者: a27417332 (等號卡比)   2021-04-10 19:24:00
Copy Elision或RVO發生的時候根本連Move都不會有另外,右值引用通常是不會加const的,跟初衷矛盾第一個分隔線前的Deep Copy實際上也沒複製到member,但你好像期待他會輸出解構a?
作者: hunandy14 (Charlott.HonG)   2021-04-20 12:31:00
應該單純只是兩家的 複製省略 策略不同而已
作者: MartinJ40 (Martin J-40)   2021-04-20 15:21:00
優化條件不一樣阿 vs開用release跑就變右邊沒有不一樣阿function return會變成move所以不要在return call moveeffective modern c++有寫 所以右邊是正確的抱歉不是move 是copy elision編譯器的實作是c會就地變成reference指向RVOrvo生命週期就變成c的生命週期推 g0010726: 樓樓上說的關掉優化在c++17後應該也沒用跟優化無關

Links booklink

Contact Us: admin [ a t ] ucptt.com