mba*_*ang 6 c++ templates iterator language-lawyer c++-concepts
随机访问迭代器的要求可在此处找到。在此页面上,您将看到对于任意两个RandIts,a和b,a<b和a-b都是合法的 c++。a-b返回一个difference_type.
在我的代码中,我想计算a<b,但不是比较a和b,而是比较a-first和b-first。这需要两件事:
difference_types 具有可比性。(a-first < b-first) == (a < b)。将 s的比较实现difference_type为满足 (2) 是很容易的,但我无法判断标准是否要求这样做。(1) 和 (2) 成立吗?
标准要求iterator_traits<It>::difference_type是“有符号整数类型”(或void)。这句话应该从字面上理解。[basic.fundamental]/1定义了许多“整数类型”类型及其子集“有符号整数类型”。
这些是C++ 中唯一的“有符号整数类型”。您可以创建类似于“有符号整数类型”的类型,但该标准明确定义了一组适合该术语的特定函数类型。而您的用户定义类型不是它们。
difference_type所以“可比”与否不是你可以选择的,而是你可以选择的。所有整数类型都是可比较的,因为 C++ 就是这样定义它们的。