首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++ 可不可以返回临时变量

2013-12-04 
C++ 能否返回临时变量CBox CBox::operator+(const CBox& box)const{return CBox(m_Length,m_Width,m_Heigh

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.
[解决办法]

引用:
Quote: 引用:

第一种写法临时对象会复制给调用端的本地对象,虽然临时对象销毁了,但是本地对象没有问题。
第二种写法调用端还没来得及接收,临时对象就销毁了,所以有问题。


请问第二种写法 调用端还没来的及接受 什么意思?


你的第一个问题已经回答了第二个问题,因为这个临时变量在函数执行结束后已经销毁,所以不能返回它的引用啊

热点排行