我试图重载运算符+和+ = std :: vector,我做的是
namespace std {
template<class T>
vector<T> operator+(vector<T> x, vector<T> y) {
vector<T> result;
result.reserve(x.size());
for (size_t i = 0; i < x.size(); i++)
result[i] = x[i] + y[i];
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
但我认为这是不好的做法,因为clang-tidy警告我"修改std命名空间会导致未定义的行为".在为STL类重载运算符时还有其他更好的做法吗?
最佳做法是不要这样做.
但如果你真的想要你仍然可以:只是不要把它放在命名空间中std
.
并且不要通过值来接受你的论证,除非你故意这样做以便充分利用移动语义(你不是).