是否必须在STL中的stl_iterator_base.h中对const _Tp *进行部分说明

时间:2015-12-02 10:01:59

标签: c++ stl iterator

这是代码:

template <class _Iter>
inline typename iterator_traits<_Iter>::value_type*
__value_type(const _Iter&)
{
  return static_cast<typename iterator_traits<_Iter>::value_type*>(0);
}

该函数重新编号_Iter的value_type *。

这是const _Tp *

的部分说明
template <class _Tp>
struct iterator_traits<const _Tp*> {
typedef random_access_iterator_tag iterator_category;
  typedef _Tp                         value_type;
  typedef ptrdiff_t                   difference_type;
  typedef const _Tp*                  pointer;
  typedef const _Tp&                  reference;

};

const _Tp *的局部特征是必要的吗?如果我们调用

__value_type(const _Iter&)

我们致电

iterator_traits<_Iter>

实际上没有const。

iterator_traits<const _Iter> 

永远不会发生。

1 个答案:

答案 0 :(得分:0)

std::iterator_traits<T>的一个用途是确定算法中的value_type。当T const*用作迭代器类型时,将需要专门化。 value_typeconst - 指针对象的非限定版本。实现可以选择使用

template <typename T>
struct iterator_traits<T*> {
    using value_type = std::remove_cv_t<T>;
    // ...
};

而非专门针对T const*

使用T const*的专业化具有很好的效果,它可以诊断[非法]用户尝试专门针对一般T const*的尝试:没有标准库专业化用户代码专门为{ {1}}编译正常但行为未定义。