了解取消引用的类型 - const_iterator

understanding the type of dereference - const_iterator

本文关键字:const iterator 类型 取消 引用 了解      更新时间:2023-10-16

我有这样的声明:

list<string*>::const_iterator iter;

我试图了解*iter的类型是:string*const string*还是其他什么。

我读到cost_iterator返回引用。 一方面,列表包含string*,迭代器指向这些。 另一方面,它是const_iterator的,因此它指向的值应该是const的,并且它的行为就好像列表中的数据是const?尽管不是真的? 不确定我错过了什么以及正确的答案是什么。

std::list<T>::const_iterator::operator*返回一个const T&。 由于您的列表存储了一个string*这意味着您将获得对string * const的引用,因为const适用于T,而不是T指向的指针。

一般的答案是const T &,我更喜欢写T const &,因为它在下一段中正确组成。

对于T=string*,我们得到string * const &,或对字符串的常量指针的引用

这意味着您不能通过将列表元素指向不同的字符串来改变列表元素(通过const_iterator(,但您可以通过更改列表指向的字符串来间接改变列表。

您可以阅读std::list<T>的定义,但它并不像迭代器行为那样清楚 - 它的工作原理是这样的:

  • std::list<T>::value_typeT相同

    • 所以std::list<string*>::value_typestring*.
  • std::list<T>::const_iteratorconstLegacy双向迭代器

    建模
  • LegacyBidirectionalIterator 是一个 LegacyForwardIterator,必须满足 LegacyInputIterator

  • 旧版输入迭代器必须支持表达式*i返回类型reference

  • 最后,从LegacyForwardIterator中,我们宁愿跳过

    • 类型std::iterator_traits::引用必须完全正确

      。 const T&else(它是常数(,

    (其中 T 是用 std::iterator_traits::value_type 表示的类型(

    这就是我们如何从名为reference的类型到我们开始const T &