什么时候使用迭代器的“value_type”?

When is a `value_type` of an iterator used?

我想了解什么时候实际使用 iterator::value_type

因为,迭代器的所有运算符,似乎只使用 iterator::pointeriterator::reference

问题:iterator::value_type是真的用来做什么的吗?

附加问题:迭代器是否继承自

std::iterator<std::random_access_iterator_tag, int, std::ptrdiff_t, bool*, bool&>

提出一些语义问题?

编辑: 要理解我为什么问这个问题,是因为我正在为 pointerreference 类型的迭代器工作是代理 类.

我可以考虑在泛型代码中使用它。假设您在 C++11 中编写一个对范围求和的通用函数。你可以写成

template<typename It>
auto sum(It begin, It end) -> typename It::value_type
{
    typename It::value_type _sum{}; 
    // compute the sum
    return _sum;
}

当然你可以使用decltype(*begin)代替,但是使用value_type看起来更整洁更优雅。在C++14中我想不出非常有用,因为您可以对函数 return.

进行自动类型推导

EDIT 正如@Luc Danton 在评论中提到的那样,大多数时候使用 decltype(*begin) 会产生参考,因此您需要 std::remove_reference,这让它看起来很讨厌。所以 value_type 派上用场了。