5

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

定义const T& at(unsigned int i) const并且T& at(unsigned int)不仅是非常量版本有什么好处?

4

1 回答 1

10

因为您将无法调用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
于 2012-11-20T18:18:05.573 回答