[問題] 函式回傳物件

看板C_and_CPP作者時間9年前 (2015/06/16 22:07), 編輯推噓4(407)
留言11則, 6人參與, 最新討論串1/1
以下代碼只印出"fun" 若把移動構造函示宣告成delete又會編譯失敗 造裡說函式回傳一個非引用的物件是個右值,會呼叫移動構造函式 再用此右值初始化c3應該會再呼叫移動構造函式第二次 但為何一次都沒呼叫到呢? 請各位指教一下,謝謝~ class ch{ public: ch(){} ch(const ch&){cout<<"ch's copy constructor"<<endl;} ch(ch&&){cout<<"ch's move constructor"<<endl;} }; ch fun() { ch c; cout<<"fun"<<endl; return c; } int main() { ch c3=fun(); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.25.220.250 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1434463670.A.804.html

06/16 22:41, , 1F
RVO 的關係 (全名 Return Value Optimization)
06/16 22:41, 1F

06/16 22:42, , 2F
這個是標準裡少數幾個可以不照理論狀況走的情形
06/16 22:42, 2F

06/16 22:42, , 3F
g++ 的話加上 -fno-elide-constructors
06/16 22:42, 3F

06/16 22:53, , 4F
感謝,樓上兩位太強了!
06/16 22:53, 4F

06/17 01:00, , 5F
VS沒有全支援C++11…
06/17 01:00, 5F

06/17 02:41, , 6F
可以請問一下為何會有copy也會有move呢
06/17 02:41, 6F

06/17 02:41, , 7F
copy我可以理解,move我就不懂了
06/17 02:41, 7F

06/17 03:43, , 8F
06/17 03:43, 8F

06/17 09:38, , 9F
函式裡只有一個可能是回傳唯一的local物件,可以被最佳化成函
06/17 09:38, 9F

06/17 09:39, , 10F
式裡的c就是main()的c3,連回傳都不用回傳.
06/17 09:39, 10F

06/17 09:41, , 11F
可以試著改成有可能回傳不同的local物件,這樣會無法被最佳化
06/17 09:41, 11F
文章代碼(AID): #1LW2ssW4 (C_and_CPP)