Я хотел бы реализовать унарный арифметический оператор с семантикой перемещения для std :: vector.Цель состоит в том, чтобы избежать внутреннего выделения внутри оператора, если оно применяется к значению.
Проблема: следующая операция не компилируется: c = - (a + b)
Причина, по которой это не компилируется, заключается в том, что двоичный арифметический оператор + I реализован для std :: vectorвозвращает const lvalue (так что компилятор будет жаловаться на (a + b) = c, что не имеет смысла).
Бинарный оператор +
template<class T, class AllocVect1, class AllocVect2>
inline const std::vector<T> operator+ (
const std::vector<T, AllocVect1> &v1,
const std::vector<T, AllocVect2> &v2) {
std::vector<T> vout;
*Compute vout = v1 + v2*
return vout;
}
Унарный оператор
template<class T, class Alloc>
inline const std::vector<T>& operator- (std::vector<T, Alloc> &&v) {
std::transform (
v.begin (),
v.end (),
v.begin (),
[](const auto &val){return -val;});
return v;
}