首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >cbegin/cend背后的原因是什么?

cbegin/cend背后的原因是什么?
EN

Stack Overflow用户
提问于 2012-08-17 15:16:33
回答 5查看 52K关注 0票数 205

我想知道为什么在C++11中引入cbegincend

调用这些方法与beginend的常量重载不同的情况是什么

EN

回答 5

Stack Overflow用户

发布于 2012-08-17 15:27:09

除了Nicol Bolas在his answer上说的话,考虑一下新的auto关键字:

代码语言:javascript
复制
auto iterator = container.begin();

使用auto,无法确保begin()为非常量容器引用返回常量运算符。所以现在你做到了:

代码语言:javascript
复制
auto const_iterator = container.cbegin();
票数 68
EN

Stack Overflow用户

发布于 2012-08-17 15:34:35

把这当做一个实际的用例

代码语言:javascript
复制
void SomeClass::f(const vector<int>& a) {
  auto it = someNonConstMemberVector.begin();
  ...
  it = a.begin();
  ...
}

赋值失败,因为it是一个非常量迭代器。如果最初使用的是cbegin,那么迭代器的类型应该是正确的。

票数 15
EN

Stack Overflow用户

发布于 2014-06-06 04:34:34

只是偶然发现了这个问题。我知道这已经是答案了,而且它只是一个边节点...

auto const it = container.begin()是与auto it = container.cbegin()不同的类型

int[5]的区别(使用指针,我知道它没有begin方法,但很好地显示了不同之处……但可以在std::cbegin()std::cend()的c++14中工作,这基本上是人们在这里应该使用的)……

代码语言:javascript
复制
int numbers = array[7];
const auto it = begin(numbers); // type is int* const -> pointer is const
auto it = cbegin(numbers);      // type is int const* -> value is const
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12001410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档