2

我正在阅读有关运算符重载的文档: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;
}

像这样的加州理工学院网站上的例子,在链接的底部

4

3 回答 3

1

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

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

于 2013-01-23T04:47:49.393 回答
1

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

Matrix operator+(Matrix lhs, const Matrix &rhs)
{
  return lhs += rhs;
}
于 2013-01-23T05:00:32.277 回答
1

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

于 2013-01-23T05:28:09.303 回答