Difference_type 必须具有可比性吗?

mba*_*ang 6 c++ templates iterator language-lawyer c++-concepts

随机访问迭代器的要求可在此处找到。在此页面上,您将看到对于任意两个RandIts,ab,a<ba-b都是合法的 c++。a-b返回一个difference_type.

在我的代码中,我想计算a<b,但不是比较ab,而是比较a-firstb-first。这需要两件事:

  1. difference_types 具有可比性。
  2. (a-first < b-first) == (a < b)

将 s的比较实现difference_type为满足 (2) 是很容易的,但我无法判断标准是否要求这样做。(1) 和 (2) 成立吗?

Nic*_*las 5

标准要求iterator_traits<It>::difference_type是“有符号整数类型”(或void)。这句话应该从字面上理解。[basic.fundamental]/1定义了许多“整数类型”类型及其子集“有符号整数类型”。

这些是C++ 中唯一的“有符号整数类型”。您可以创建类似于“有符号整数类型”的类型但该标准明确定义了一组适合该术语的特定函数类型。而您的用户定义类型不是它们。

difference_type所以“可比”与否不是你可以选择的,而是你可以选择的。所有整数类型都是可比较的,因为 C++ 就是这样定义它们的。