C++编译器警告 - 返回局部变量

tri*_*ker 15 c++

我只是想重载一个+运算符,我得到这个编译器警告

reference to local variable 'tmp' returned
Run Code Online (Sandbox Code Playgroud)

这是重载的代码

const Int& Int::operator+(const Int& p) const
{
    Int tmp = value + p.value;
    return tmp;
}
Run Code Online (Sandbox Code Playgroud)

这是班级

class Int{
    int value;
public:
    Int() {}    // default constructor
    Int(int v) : value(v) {}
    Int& operator=(const Int&);
    const Int& operator+(const Int&) const;
};
Run Code Online (Sandbox Code Playgroud)

Sah*_*has 19

您不能返回对局部变量的引用.在operator+()函数内部,您将创建一个名为的局部变量tmp.一旦函数退出,它就会被销毁.您不能返回对该变量的引用,因为当调用函数获取返回值时它不再存在.

将您的函数定义更改为:

const Int operator+(const Int&) const;
Run Code Online (Sandbox Code Playgroud)

它会在没有警告的情况下构建并且工作正常.


Pet*_*mit 8

您尝试执行的操作是返回对内存位置的引用,该引用在您返回时将无效.

当变量tmp超出范围时(即,当operator +完成时),变量tmp将消失.

因为返回类型是Int&,所以tmp的值不是在"return tmp"返回,而是对tmp的引用.这是不正确的,因为方法完成后tmp将不再存在!!

解决方案:不要作为参考返回,而是作为Int