std::experimental::ranges:: WeaklyIncrementable
|
Определено в заголовочном файле
<experimental/ranges/iterator>
|
||
|
template
<
class
I
>
concept
bool
WeaklyIncrementable
=
|
(ranges TS) | |
Концепт
WeaklyIncrementable<I>
определяет требования к типам, которые могут быть инкрементированы (с помощью пре- и постинкрементных операторов). Операции инкремента не обязаны сохранять равенство, и тип не обязан быть
EqualityComparable
.
Пусть
i
будет объектом типа
I
.
i
называется
инкрементируемым
, если он находится в области определения как префиксного, так и постфиксного инкремента.
WeaklyIncrementable<I>
выполняется только если:
- ++ i и i ++ имеют одинаковую область определения;
-
Если
i
инкрементируем, тогда:
- ++ i и i ++ оба продвигают i к следующему элементу; и
- ++ i ссылается на тот же объект, что и i .
Сохранение равенства
Выражение называется сохраняющим равенство если оно даёт равные результаты при равных входных данных.
- Входные данные выражения состоят из его операндов.
- Выходные данные выражения состоят из его результата и всех операндов, измененных выражением (если таковые имеются).
Каждое выражение, которое должно сохранять равенство, дополнительно должно быть стабильным : два вычисления такого выражения с одинаковыми входными объектами должны давать равные выходные данные при отсутствии каких-либо явных изменений этих входных объектов между вычислениями.
Примечания
Для типов
WeaklyIncrementable
,
a
равно
b
не подразумевает, что
++
a
равно
++
b
. Алгоритмы для таких типов должны быть однопроходными и никогда не пытаться проходить через одно и то же значение дважды.