Я не уверен, почему эта функция возвращает значение.Разве эта функция не должна возвращать Matrix&&
, как показано ниже?
Matrix&& operator+(const Matrix &a, Matrix &&b) {
b += a;
return std::move(b);
}
Это имеет дополнительное преимущество, заключающееся в том, что x1 + x2 + x3 + ... + xn
создает не более одного временного, что важно, если Matrix оказывается выделенным стеком (кактогда он ничего не получает от ходов).
Я думаю, что подписи должны быть такими:
Matrix&& operator+(Matrix &&a, Matrix &&b );
Matrix&& operator+(const Matrix &a, Matrix &&b );
Matrix&& operator+(Matrix &&a, const Matrix &b);
Matrix operator+(const Matrix &a, const Matrix &b);