operator==,<=> (std::counted_iterator)
|
template
<
std::
common_with
<
I
>
I2
>
friend
constexpr
bool
operator
==
(
|
(1) | (начиная с C++20) |
|
template
<
std::
common_with
<
I
>
I2
>
friend
constexpr
strong_ordering operator
<=>
(
|
(2) | (начиная с C++20) |
Сравнивает базовые длины (т.е. расстояния до конца).
<=>
.
Поведение не определено, если x и y не указывают на элементы одной и той же последовательности. То есть должно существовать некоторое n такое, что std:: next ( x. base ( ) , x. count ( ) + n ) и std:: next ( y. base ( ) , y. count ( ) + n ) ссылаются на один и тот же элемент.
Операторы
<
,
<=
,
>
,
>=
и
!=
синтезируются
соответственно
из
operator
<=>
и
operator
==
.
Этот шаблон функции не виден для обычного unqualified или qualified lookup , и может быть найден только с помощью argument-dependent lookup , когда std::counted_iterator<I> является ассоциированным классом аргументов.
Содержание |
Параметры
| x, y | - | адаптеры итераторов |
Возвращаемое значение
Примечания
Поскольку длина отсчитывается вниз, а не вверх, порядок аргументов operator <=> в базовом выражении сравнения обратный, т.е. y является lhs , x является rhs .
Пример
#include <initializer_list> #include <iterator> int main() { static constexpr auto v = {1, 2, 3, 4, 5, 6}; constexpr std::counted_iterator<std::initializer_list<int>::iterator> it1{v.begin(), 5}, it2{v.begin(), 5}, it3{v.begin() + 1, 4}, it4{v.begin(), 0}; static_assert(it1 == it2); static_assert(it2 != it3); static_assert(it2 < it3); static_assert(it1 <= it2); static_assert(it3 != std::default_sentinel); static_assert(it4 == std::default_sentinel); // it2 == std::counted_iterator{v.begin(), 4}; // НП: операнды не ссылаются на // элементы одной и той же последовательности }
` - C++ специфические термины (counted_iterator, initializer_list, default_sentinel, static_assert и др.) оставлены без перевода - Комментарии в коде переведены на русский язык с сохранением технической точности
Смотрите также
проверяет, равно ли расстояние до конца
0
(шаблон функции) |
|
|
(C++20)
|
перемещает итератор вперед
(шаблон функции) |
|
(C++20)
|
вычисляет расстояние между двумя адаптерами итераторов
(шаблон функции) |