为什么需要const和non-const访问器?

5

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

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


1个回答

10

因为您无法在一个const向量对象上调用at

如果您仅拥有非const版本,则以下内容:

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

没有使用const版本将无法编译。有了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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接