问题描述
为什么STL容器定义访问器的const和非const版本?
Why do the STL containers define const and non-const versions of accessors ?
定义 const T&有什么好处? at(unsigned int i)const
和 T& at(unsigned int)
和非const版本?
What is the advantage of defining const T& at(unsigned int i) const
and T& at(unsigned int)
and not only the non-const version ?
推荐答案
因为您不会不能在 const
矢量对象上调用 at
。
Because you wouldn't be able to call at
on a const
vector object.
如果您只有非 const
版本,则以下内容:
If you only had the non-const
version, the following:
const std::vector<int> x(10);
x.at(0);
不会编译。拥有 const
版本可以实现这一点,同时也可以防止您实际更改 at
返回的内容-根据合同,因为向量是 const
。
would not compile. Having the const
version makes this possible, and at the same time prevents you from actually changing what at
returns - which is by contract, since the vector is const
.
非 const $可以在非
const
对象上调用c $ c>版本,并允许您修改返回的元素,这也是有效的,因为矢量不是const。
The non-const
version can be called on a non-const
object and allows you to modify the returned element, which is also valid because the vector isn't 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
这篇关于为什么要使用const和非const访问器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!