Spec-Zone.ru › C++

std::weakly_incrementable

Определено в заголовке <iterator>
template< class I >
    concept weakly_incrementable =
        std::movable<I> &&
        requires(I i) {
            typename std::iter_difference_t<I>;
            requires /*is-signed-integer-like*/<std::iter_difference_t<I>>;
            { ++i } -> std::same_as<I&>; // not required to be equality-preserving
            i++;                         // not required to be equality-preserving
        };
(с C++20)

где /*is-signed-integer-like*/<I> является true тогда и только тогда, когда I — тип, подобный целому числу со знаком (см. ниже).

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

Для типов std::weakly_incrementable a == b не подразумевает, что ++a == ++b. Алгоритмы для слабо инкрементируемых типов должны быть алгоритмами однократного прохода. Эти алгоритмы могут использоваться с потоками ввода (istream) как источником входных данных через std::istream_iterator.

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

I моделирует std::weakly_incrementable только если для объекта i типа I:

  • Выражения ++i и i++ имеют одинаковую область определения,
  • Если i инкрементируем, то оба ++i и i++ сдвигают i, и
  • Если i инкрементируем, то std::addressof(++i) == std::addressof(i).

Типы, подобные целым числам

Тип, подобный целому числу, представляет собой (возможно, с квалификаторами cv) целочисленный тип (за исключением cv bool) или предоставляемый реализацией (а не пользователем) тип, который ведет себя как целочисленный тип, включая все операторы, неявные преобразования и std::numeric_limits специализации. Если тип, подобный целому числу, представляет только неотрицательные значения, он является типом, подобным целому числу без знака, в противном случае — типом, подобным целому числу со знаком.

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применён к Поведение, как опубликовано Корректное поведение
LWG 3467 C++20 bool считался типом, подобным целому числу исключён
P2325R3 C++20 default_initializable был обязателен необязателен

См. также

incrementable
(C++20)
определяет, что операция инкремента для типа weakly_incrementable сохраняет равенство и что тип является equality_comparable
(концепция)

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

Spec-Zone.ru

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