繁体   English   中英

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

[英]C++ compiler warning - returning local variable

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

reference to local variable 'tmp' returned

这是重载的代码

const Int& Int::operator+(const Int& p) const
{
    Int tmp = value + p.value;
    return tmp;
}

这是班级

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

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

将您的函数定义更改为:

const Int operator+(const Int&) const;

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

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

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

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

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

tmp的存储类为auto ,退出时会消失。 答案是指定静态。

static Int tmp = value + p.value;

分配给tmp的存储将在程序期间保留。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM