了解取消引用的类型 - const_iterator
understanding the type of dereference - const_iterator
我有这样的声明:
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_type
与T
相同- 所以
std::list<string*>::value_type
string*
.
- 所以
-
建模std::list<T>::const_iterator
const
Legacy双向迭代器 -
LegacyBidirectionalIterator 是一个 LegacyForwardIterator,必须满足 LegacyInputIterator
-
旧版输入迭代器必须支持表达式
*i
返回类型reference
-
最后,从LegacyForwardIterator中,我们宁愿跳过
-
类型std::iterator_traits::引用必须完全正确
。 const T&else(它是常数(,
(其中 T 是用 std::iterator_traits::value_type 表示的类型(
这就是我们如何从名为
reference
的类型到我们开始const T &
。 -