繁体   English   中英

了解取消引用的类型-const_iterator

[英]understanding the type of dereference - const_iterator

我有这个声明:

list<string*>::const_iterator iter;

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

我读到cost_iterator返回参考。 一方面,列表包含string* ,并且迭代器指向这些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 & ,或对指向string的常量指针引用

这意味着您不能通过将列表元素指向另一个字符串来对其进行变异(通过const_iterator),但是可以通过更改其指向的字符串来间接地对列表进行变异。

您可以阅读std::list<T>的定义,但是关于迭代器的行为尚不清楚,它的工作原理如下:

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

    • 所以std::list<string*>::value_typestring*
  • std::list<T>::const_iteratorconst LegacyBidirectionalIterator建模

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

  • LegacyInputIterator必须支持表达式*i返回类型reference

  • 最后,我们从LegacyForwardIterator中跳过了

    • 类型std :: iterator_traits :: reference必须完全相同

      ... const T&否则(它是常数),

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM