这是使用组合的向量类重载[]的正确方法

时间:2013-06-04 08:23:57

标签: c++

我正在构建一个自定义矢量类,其中std::vector为唯一成员,并通过重载+, - 和其他来添加各种数学函数。

我这样做是为了直接访问vector元素:

template <typename T, int N>
class Vector{

    std::vector<T> v;

public:

    Vector():v(N,0){}

    const T& operator[](int i)const{
        return v.at(i);
    }
    T& operator[](int i){
        return v.at(i);
    }

在这种情况下,这是否是一种可接受的重载技术,这样我就可以从const Vector<...>读取一个元素,并从非const中分配一个元素?由于at返回一个引用,在这种情况下可以正确分配一个元素吗?

1 个答案:

答案 0 :(得分:3)

是的,这是完全合理使用重载。不过,我对at的使用提出质疑。同时拥有atoperator[]会更好,这些std::vector和{{1}}会传递给{{1}}对应的人。通过这种方式,您可以让呼叫者在安全性和性能之间做出选择(这就是为什么这两个版本首先存在的原因)。