C++ 能否返回临时变量
CBox CBox::operator+(const CBox& box)const
{
return CBox(m_Length,m_Width,m_Height+box.m_Height);
}
c++2010 入门 中为什么可以返回临时变量?这个临时变量在函数执行结束后已经销毁
CBox& CBox::operator+(const CBox& box)const
{
return CBox(m_Length,m_Width,m_Height+box.m_Height);
}
若返回引用,编译器提示 返回“临时变量或临时变量地址”,为什么会这样提示呢? C++?能否返回临时变量 C++ 返回值 临时变量
[解决办法]
第一种写法临时对象会复制给调用端的本地对象,虽然临时对象销毁了,但是本地对象没有问题。
第二种写法调用端还没来得及接收,临时对象就销毁了,所以有问题。
[解决办法]
你纠结的是深浅拷贝的问题吧
CBox CBox::operator+(const CBox& box)const 代码中返回的是值 其实隐含调用了一次复制拷贝构造或者赋值操作也就是说会调用 CBox类的拷贝构造函数 或者赋值函数
CBox& CBox::operator+(const CBox& box)const 则是返回局部变量的引用 局部变量在这个函数结束时销毁所以会警告
值传递会调用赋值 因此性能低 指针或引用传递 只是传的指针不需要拷贝赋值 因此效率高
[解决办法]
The first sample is perfectly valid. See my answer on Stackoverflow.com
http://stackoverflow.com/questions/18157090/how-to-avoid-the-copy-when-i-return/18157181#18157181
Second sample is very dangerous, it's undefined behavior. Because you are returning a reference to a temporary object. When function returns, it points to invalid data.
[解决办法]