[问题] 函式回传物件

楼主: RealJack   2015-06-16 22:07:47
以下代码只印出"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;
}
作者: LPH66 (-6.2598534e+18f)   2015-06-16 22:41:00
RVO 的关系 (全名 Return Value Optimization)这个是标准里少数几个可以不照理论状况走的情形
作者: Feis (永远睡不着 @@)   2015-06-16 22:42:00
g++ 的话加上 -fno-elide-constructors
楼主: RealJack   2015-06-16 22:53:00
感谢,楼上两位太强了!
作者: johnhmj (耗呆肥羊)   2015-06-17 01:00:00
VS没有全支援C++11…
作者: wtchen (没有存在感的人)   2015-06-17 02:41:00
可以请问一下为何会有copy也会有move呢copy我可以理解,move我就不懂了
作者: johnhmj (耗呆肥羊)   2015-06-17 03:43:00
作者: kwpn (ITSST)   2015-06-17 09:38:00
函式里只有一个可能是回传唯一的local物件,可以被最佳化成函式里的c就是main()的c3,连回传都不用回传.可以试着改成有可能回传不同的local物件,这样会无法被最佳化

Links booklink

Contact Us: admin [ a t ] ucptt.com