作者RealJack ()
看板C_and_CPP
標題函式回傳物件
時間Tue Jun 16 22:07:47 2015
以下代碼只印出"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
推 LPH66: RVO 的關係 (全名 Return Value Optimization) 06/16 22:41
→ LPH66: 這個是標準裡少數幾個可以不照理論狀況走的情形 06/16 22:42
→ Feis: g++ 的話加上 -fno-elide-constructors 06/16 22:42
→ RealJack: 感謝,樓上兩位太強了! 06/16 22:53
推 johnhmj: VS沒有全支援C++11… 06/17 01:00
推 wtchen: 可以請問一下為何會有copy也會有move呢 06/17 02:41
→ wtchen: copy我可以理解,move我就不懂了 06/17 02:41
推 kwpn: 函式裡只有一個可能是回傳唯一的local物件,可以被最佳化成函 06/17 09:38
→ kwpn: 式裡的c就是main()的c3,連回傳都不用回傳. 06/17 09:39
→ kwpn: 可以試著改成有可能回傳不同的local物件,這樣會無法被最佳化 06/17 09:41