是否可以为 Matrix 的 class 实现 move operator+/operator-/operator*?

Is it possible to implement move operator+/operator-/operator* for class of Matrix?

我正在考虑如何使用加法(减法)和乘法操作定义 class 实数矩阵 NxN。我正在寻找有效的内存使用。

class Matrix {
private:
    std::size_t _size_n;
    double **_pMatrix;

public:
    Matrix(const size_t n);

    ~Matrix();

    double &operator()(size_t, const size_t);

    double operator()(size_t, const size_t) const;

    size_t size_n() const { return _size_n; }
};

std::ostream &operator<<(std::ostream &, const Matrix &);

Matrix operator+(const Matrix&, const Matrix&);
Matrix operator-(const Matrix&, const Matrix&);
Matrix operator*(const Matrix&, const Matrix&);

是的,你可以有额外的重载

Matrix/*&&*/ operator+(const Matrix&, Matrix&&);
Matrix/*&&*/ operator+(Matrix&&, const Matrix&);
Matrix/*&&*/ operator+(Matrix&&, Matrix&&);

重用其中一个临时内存。

它们都可以用Matrix& operator += (Matrix&, const Matrix&)实现 通过更改顺序,因为 + 是对称的。 operator - 需要专用代码。

另一种优化内存的方法是使用expression templates而不是直接计算结果。

虽然它有关于生命周期问题的缺点(尤其是 auto)。