为什么STL容器定义访问器的const和非const版本?
定义const T& at(unsigned int i) const而T& at(unsigned int)不仅仅是非const版本有什么好处?
因为你不能够调用at一个在const矢量对象.
如果您只有非const版本,请执行以下操作:
const std::vector<int> x(10);
x.at(0);
Run Code Online (Sandbox Code Playgroud)
不会编译.拥有该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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
991 次 |
| 最近记录: |