[英]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_type
与T
相同
std::list<string*>::value_type
是string*
。 std::list<T>::const_iterator
为const
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.