c++ - 重载运算符 + 用于向量:命名空间 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 类重载运算符方面还有其他更好的做法吗?
解决方案
最佳做法是不要这样做。
但如果你真的想要你仍然可以:只是不要把它放在 namespace 中std
。
并且不要按价值来衡量你的论点,除非你故意这样做是为了充分利用移动语义(你不是)。
推荐阅读
- abap - ABAP 中两个 Translate 元素之间的区别
- r - 在 R 中使用 API 限制通过时间刮取数据
- android - 升级到 react-native 0.61.0 后,图像会覆盖元素的 backgroundColor
- javascript - 数据如何从 getValue 存储在数组中
- javascript - 访问 $refs 中的嵌套数组
- sql - 在预言机中填写“L00000000”和“L00000010”之间的表格
- linux-kernel - 如何在 Linux 上调试千兆以太网?
- vb.net - 指定的强制转换在 ManagementObjectSearcher 上无效
- java - 尽管 JSON 正确,但出现“预期 BEGIN_ARRAY 但为 BEGIN_OBJECT”错误
- vue.js - Vue-bootstrap - 当表格更改项目时,按钮似乎没有更新