关于运算符重载的局部变量的警告,遵循教程,不知道该怎么做

时间:2013-01-23 04:46:24

标签: c++ operator-overloading

我正在阅读有关运算符重载的文档:http://courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html但是当我运行下面的代码时(在实际上下文中),我总是得到一个关于结果如何是局部变量的警告。而且我不应该返回一个局部变量是有意义的,但似乎工作正常。有没有办法用以下代码消除警告:

const Matrix & Matrix::operator+(const Matrix &other) const
{
  Matrix result(*this);
  result += other;
  return result;
}

像这样的caltech网站上的例子位于link

的底部

3 个答案:

答案 0 :(得分:2)

要删除警告,您需要按值返回Matrix

您还应理想地将其定义为自由函数,因为从语义上讲,它不需要修改它所调用的对象。

答案 1 :(得分:2)

在您的代码中,您尝试将引用返回到将在函数外部销毁的对象。您必须返回对象(不是对象的引用)。

答案 2 :(得分:1)

operator+()不应该返回引用类型,因为它是一个保存操作结果的新(本地声明的)实例。

Matrix operator+(Matrix lhs, const Matrix &rhs)
{
  return lhs += rhs;
}