关于重载运算符定义中返回值为引用值的问题

header_zj 2016-05-31 11:48:39
这个是头文件中关于struct sale_data的声明
struct sale_data
{
public:
//other constructors
sale_data& operator+ (sale_data&);

private:
std::string bookNo;
unsigned sold=0;
double revenue=0.0;
};

这段是source中关于重载+运算符的定义
sale_data&
sale_data::operator+(sale_data& p)
{
sale_data New;
New.bookNo = bookNo + p.bookNo;
New.revenue = revenue + p.revenue;
New.sold = sold + p.sold;
return New;
}


但是会出现一个warning如下
warning: reference to local variable 'New' returned [-Wreturn-local-addr]|


我知道这是由于我返回的是一个引用值导致的问题,我想问一下这样编译后运行的结果会产生什么错误吗

(PS:我把返回值改成了sale_data后就不会有warning 了)
...全文
175 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Saleayas 2016-05-31
  • 打赏
  • 举报
回复
return *this;
jiqiang01234 2016-05-31
  • 打赏
  • 举报
回复 1
返回局部变量的指针或是引用是很危险的举动,因函数返回后,局部变量销毁,指向其的指针或引用就是个定时炸弹
  • 打赏
  • 举报
回复
operator+应该返回 sale_data,不能返回引用类型。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧