首页 > 解决方案 > 重载运算符 + 用于向量:命名空间 std

问题描述

我正在尝试为 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 类重载运算符方面还有其他更好的做法吗?

标签: c++vectorstd

解决方案


最佳做法是不要这样做。

但如果你真的想要你仍然可以:只是不要把它放在 namespace 中std

并且不要按价值来衡量你的论点,除非你故意这样做是为了充分利用移动语义(你不是)。


推荐阅读