【发布时间】:2019-02-05 19:22:33
【问题描述】:
我正在尝试为 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;
}
}
但我认为这是不好的做法,因为 clang-tidy 警告我“修改 std 命名空间可能导致未定义的行为”。为 STL 类重载运算符还有其他更好的做法吗?
【问题讨论】:
-
只是不要把重载放在
std命名空间中? -
首先,你想要
vector<T>&,而不是vector<T> -
除了极少数例外,不允许将定义放置在 std 命名空间中,不清楚为什么您认为在这种情况下需要这样做。
-
你可以在这部分找到答案:stackoverflow.com/questions/3123699/…