是否可以为 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
)。
我正在考虑如何使用加法(减法)和乘法操作定义 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
)。