Namespaces
Variants

std:: weakly_incrementable

From ru.cppreference.net
Iterator library
Iterator concepts
weakly_incrementable
(C++20)
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
Определено в заголовке <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 & > ; // не требуется сохранять равенство
i ++ ; // не требуется сохранять равенство

} ;
(начиная с C++20)

Для определения /*is-signed-integer-like*/ см. is-integer-like .

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

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

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

Для объекта i типа I , I моделирует std::weakly_incrementable только если выполняются все следующие условия:

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

Отчеты о дефектах

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

DR Applied to Behavior as published Correct behavior
P2325R3 C++20 default_initializable was required not required

Смотрите также

определяет, что операция инкремента для weakly_incrementable типа является сохраняющей равенство и что тип является equality_comparable
(концепт)