为什么有const和非const访问器?

时间:2012-11-20 18:17:00

标签: c++ const getter

为什么STL容器定义访问器的const和非const版本?

定义const T& at(unsigned int i) constT& at(unsigned int)而不仅仅是非const版本有什么好处?

1 个答案:

答案 0 :(得分:9)

因为您无法在at矢量对象上调用const

如果您只有非const版本,请执行以下操作:

const std::vector<int> x(10);
x.at(0);

不会编译。拥有const版本可以实现这一点,同时阻止您实际更改at返回的内容 - 这是合同,因为向量是const

可以在非const对象上调用非const版本,并允许您修改返回的元素,该元素也是有效的,因为向量不是const。

const std::vector<int> x(10);
      std::vector<int> y(10);

int z = x.at(0);          //calls const version - is valid
x.at(0) = 10;             //calls const version, returns const reference, invalid

z = y.at(0);              //calls non-const version - is valid
y.at(0) = 10;             //calls non-const version, returns non-const reference
                          //is valid