"typename iterator_traits<InputIt>::difference_type"是什么意思?



这是https://devdocs.io/cpp/algorithm/count_if:

template<class InputIt, class T>
typename iterator_traits<InputIt>::difference_type
count(InputIt first, InputIt last, const T& value)
{
typename iterator_traits<InputIt>::difference_type ret = 0;
for (; first != last; ++first) {
if (*first == value) {
ret++;
}
}
return ret;
}

我的问题是,typename iterator_traits<InputIt>::difference_type的意义是什么
如果我实现了这一点,我会简单地使用unsigned int来跟踪计数。

如果不了解迭代器,就无法知道最好的足够大的类型——两个迭代器之间的差异
例如,如果迭代器迭代文件中的字节:
文件大小是64位,但我们处于32位的过程中。std::size_t不起作用,很可能unsigned也不起作用。

因此,要求std::iterator_traits一般性地提供合适的类型。

现在,我们必须在那里使用typename来向编译器保证依赖限定名std::iterator_traits<InputIt>::difference_type将是一个类型。这一点对于两相查找非常重要。

typename告诉编译器迭代器类型::difference_type属于类类型。

考虑一个更容易理解的例子:

class ...
{
typename T::Something *p;
}

如果没有typename,编译器可能会尝试创建一个静态成员,该成员将包含T::Something乘以p的结果;

而当你声明typename时,编译器肯定知道p是一个类型为T::Something 的指针

希望这能有所帮助。

相关内容

  • 没有找到相关文章

最新更新