重载运算符 + 用于向量:命名空间 std [英] Overload operator + for vector: namespace std

查看:59
本文介绍了重载运算符 + 用于向量:命名空间 std的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试为 std::vector 重载运算符 + 和 +=,而我所做的是

I am trying to overload the operator + and += for std::vector, and what I do is

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

But I assume this is bad practice, because clang-tidy warns me "Modification of std namespace can result in undefined behavior". Is there other better practice in overloading operator for STL classes?

推荐答案

最佳做法是不要这样做.

Best practice is not to do it.

但如果你真的想要,你仍然可以:只是不要把它放在命名空间 std 中.

But if you really want to you still can: just don't put it in namespace std.

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

And don't take your arguments by value, unless you're deliberately doing so in order to make the most of move semantics (which you're not).

这篇关于重载运算符 + 用于向量:命名空间 std的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆