了解取消引用的类型 - const_iterator
understanding the type of dereference - const_iterator
我有这个声明:
list<string*>::const_iterator iter;
我正在尝试了解 *iter
的类型是:string*
、const string*
还是其他类型。
我阅读了 cost_iterator
returns 参考资料。
一方面,列表包含 string*
并且迭代器指向这些。
另一方面它是 const_iterator
所以它指向的值应该是 const
并且它就像列表中的数据是 const
一样?尽管不是真的?
不确定我错过了什么以及正确答案是什么。
std::list<T>::const_iterator::operator*
returns一个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
LegacyBidirectionalIterator
LegacyBidirectionalIterator 是一个 LegacyForwardIterator which must satisfy LegacyInputIterator
LegacyInputIterator 必须支持表达式 *i
返回类型 reference
最后,我们跳过了 LegacyForwardIterator
The type std::iterator_traits::reference must be exactly
...
const T& otherwise (It is constant),
(where T is the type denoted by std::iterator_traits::value_type)
这就是我们从名为 reference
的类型到我们开始时使用的 const T &
的方式。
我有这个声明:
list<string*>::const_iterator iter;
我正在尝试了解 *iter
的类型是:string*
、const string*
还是其他类型。
我阅读了 cost_iterator
returns 参考资料。
一方面,列表包含 string*
并且迭代器指向这些。
另一方面它是 const_iterator
所以它指向的值应该是 const
并且它就像列表中的数据是 const
一样?尽管不是真的?
不确定我错过了什么以及正确答案是什么。
std::list<T>::const_iterator::operator*
returns一个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
LegacyBidirectionalIteratorLegacyBidirectionalIterator 是一个 LegacyForwardIterator which must satisfy LegacyInputIterator
LegacyInputIterator 必须支持表达式
*i
返回类型reference
最后,我们跳过了 LegacyForwardIterator
The type std::iterator_traits::reference must be exactly
... const T& otherwise (It is constant),
(where T is the type denoted by std::iterator_traits::value_type)
这就是我们从名为
reference
的类型到我们开始时使用的const T &
的方式。