Spec-Zone.ru › C++

std::incrementable

Определён в заголовочном файле <iterator>
template< class I >
    concept incrementable =
        std::regular<I> &&
        std::weakly_incrementable<I> &&
        requires(I i) {
            { i++ } -> std::same_as<I>;
        };
(начиная с C++20)

Этот концепт задаёт требования к типам, которые можно инкрементировать с помощью операторов преинкремента и постинкремента, операции инкремента которых сохраняют равенство, а тип является std::equality_comparable.

В отличие от std::weakly_incrementable, поддерживающих только однопроходные алгоритмы, с типами, моделирующими std::incrementable, можно использовать многопроходные однонаправленные алгоритмы.

Семантические требования

I моделирует std::incrementable, только если для любых двух инкрементируемых объектов a и b типа I:

  • из bool(a == b) следует bool(a++ == b), и
  • из bool(a == b) следует bool(((void)a++, a) == ++b).

Сохранение равенства

Выражения, объявленные в requires-выражениях концептов стандартной библиотеки, должны сохранять равенство (если не указано иное).

См. также

weakly_incrementable
(C++20)
задаёт требование, согласно которому тип semiregular можно инкрементировать с помощью операторов преинкремента и постинкремента
(концепт)
same_as
(C++20)
задаёт требование, согласно которому тип совпадает с другим типом
(концепт)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/iterator/incrementable

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API