我想知道为什么在C++11中引入cbegin
和cend
?
调用这些方法与begin
和end
的常量重载不同的情况是什么
发布于 2012-08-17 15:27:09
除了Nicol Bolas在his answer上说的话,考虑一下新的auto
关键字:
auto iterator = container.begin();
使用auto
,无法确保begin()
为非常量容器引用返回常量运算符。所以现在你做到了:
auto const_iterator = container.cbegin();
发布于 2012-08-17 15:34:35
把这当做一个实际的用例
void SomeClass::f(const vector<int>& a) {
auto it = someNonConstMemberVector.begin();
...
it = a.begin();
...
}
赋值失败,因为it
是一个非常量迭代器。如果最初使用的是cbegin,那么迭代器的类型应该是正确的。
发布于 2014-06-06 04:34:34
只是偶然发现了这个问题。我知道这已经是答案了,而且它只是一个边节点...
auto const it = container.begin()
是与auto it = container.cbegin()
不同的类型
int[5]
的区别(使用指针,我知道它没有begin方法,但很好地显示了不同之处……但可以在std::cbegin()
和std::cend()
的c++14中工作,这基本上是人们在这里应该使用的)……
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
https://stackoverflow.com/questions/12001410
复制相似问题