我正在构建一个自定义矢量类,其中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
返回一个引用,在这种情况下可以正确分配一个元素吗?
答案 0 :(得分:3)
是的,这是完全合理使用重载。不过,我对at
的使用提出质疑。同时拥有at
和operator[]
会更好,这些std::vector
和{{1}}会传递给{{1}}对应的人。通过这种方式,您可以让呼叫者在安全性和性能之间做出选择(这就是为什么这两个版本首先存在的原因)。