![](/img/trans.png)
[英]C++ compiler warning(?) when passing uninitialized local variable to function
[英]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.