什么是const“at()”的目的和在这段代码中的非const at()“?

时间:2014-01-10 14:44:20

标签: c++ const

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;     
}; 

3 个答案:

答案 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的含义。