【问题标题】:Why having const and non-const accessors?为什么要有 const 和非 const 访问器?
【发布时间】:2012-11-20 18:17:00
【问题描述】:

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

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

【问题讨论】:

标签: c++ constants getter


【解决方案1】:

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

如果您只有非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

【讨论】:

    猜你喜欢
    • 2013-07-12
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多