template<typename T>
class vector {
vector();
vector(const vector& c);
vector(size_t num, const T& val = T());
~vector();
T& operator[](size_t index);
const T& operator[](size_t index) const;
vector operator=(const vector& v);
T& at(size_t loc);
const T& at(size_t loc) const;
void pop_back();
void push_back(const T& val);
size_t size() const;
};
答案 0 :(得分:5)
它允许您在向量为const或非const时查找项目。
例如:
const vector<int> x;
x.at(0); // Calls const version;
vector<int> y;
x.at(0); // Calls non-const version;
基于const
重载方法是一种非常常见的C ++范例。在示例中,由于同样的原因,你发布了operator[]
也有一个const和非const版本。
答案 1 :(得分:1)
您可以说您正在超载vector.at()
方法。第一个采用隐式Vector* this
参数,但第二个采用const Vector* this
参数(在const引用返回旁边,注意方法签名上的const
)。因此,第一个将在const实例上调用,第二个将在非const实例上调用。
答案 2 :(得分:0)
T& at(size_t loc);
会返回对T
的引用,并且可以处理未声明为vector<>
的{{1}}。 const
会向const T& at(size_t loc) const;
提交const
引用,并在T
被声明为vector<>
时使用。
非常有意思,对吗?容器保留const
的含义。