它允许我这样做:
std::iterator_traits<I>::value_type val = *iter;
val += 5;
doSomething(val);
但如果value_type
是 const,那就更难了,因为我需要使用remove_const
.
如果我不想获得可修改的值,那么是否value_type
为 const 并不重要:
const std::iterator_traits<I>::value_type cval = *iter;
std::iterator_traits<I>::reference ref = *iter;
这两种方法都适用于 const 迭代器和非常量迭代器,无论是否value_type
为 const 都适用,但第一个示例仅适用于value_type
非常量的 const 迭代器。
您应该如何采用迭代器的底层 const 正确类型?
迭代器不一定有它自己的底层类型,迭代器通常指的是某个范围或某个集合,而该集合就是具有底层类型的集合。例如std::list<int>::const_iterator
's value_type
is std::list<int>::value_type
, which is int
not const int
。
无论如何,您不一定想知道底层类型是什么,您更有可能想知道结果*iter
是什么,这就是iterator_traits<I>::reference
告诉您的。