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

C++语言 码拜 8年前 (2016-04-23) 739次浏览
这个是头文件中关于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 了)

解决方案

20

返回局部变量的指针或是引用是很危险的举动,因函数返回后,局部变量销毁,指向其的指针或引用就是个定时炸弹

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于重载运算符定义中返回值为引用值的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)