Espacios de nombres
Variantes
Acciones

std::weakly_incrementable

De cppreference.com
< cpp‎ | iterator
 
 
Biblioteca de iteradores
Conceptos de iteradores
weakly_incrementable
(C++20)
Primitivas de iteradores
Conceptos de algoritmos y servicios
Conceptos invocables indirectos
Requerimientos comunes de algoritmos
Servicios
Adaptadores de iteradores
Iteradores de flujos
Puntos de personalización de iteradores
Operaciones de iteradores
(C++11)
(C++11)
Acceso a rangos
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
Definido en el archivo de encabezado <iterator>
template<class I>

  concept weakly_incrementable =
    std::movable<I> &&
    requires(I i) {
      typename std::iter_difference_t<I>;
      requires /*es-similar-a-entero-con-signo*/<std::iter_difference_t<I>>;
      { ++i } -> std::same_as<I&>;   // no se requiere que conserve la igualdad
      i++;                           // no se requiere que conserve la igualdad

    };
(desde C++20)

Donde /*es-similar-a-entero-con-signo*/<I> es true si y solo si I es un tipo similar a un entero con signo (véase a continuación).

Este concepto especifica los requerimientos que deben cumplir los tipos que se pueden incrementar con los operadores de preincremento y posincremento, pero cuyas operaciones de incremento no necesariamente conservan la igualdad, y no se requiere que el tipo en sí sea std::equality_comparable.

Para los tipos std::weakly_incrementable, a == b no implica que ++a == ++b. Los algoritmos de tipos débilmente incrementables deben ser algoritmos de un solo paso. Estos algoritmos se pueden usar con flujos de entrada como fuente de datos de entrada a través de std::istream_iterator.

Contenido

[editar] Requerimientos semánticos

I modela std::weakly_incrementable solo si dado un objeto i de tipo I:

  • Las expresiones ++i y i++ tienen el mismo dominio.
  • Si i es incrementable, entonces tanto ++i como i++ avanzan a i.
  • Si i es incrementable, entonces std::addressof(++i) == std::addressof(i).

[editar] Tipos similares a enteros

Un tipo similar a un entero es un tipo entero (posiblemente calificado-cv) (excepto para cv bool) o una clase proporcionada por la implementación (más no proporcionada por el usuario) que se comporta como un tipo entero, incluidos todos los operadores, conversiones implícitas y especializaciones de std::numeric_limits. Si un tipo similar a un entero solo representa valores no negativos, es similar a un entero sin signo; de lo contrario, es similar a un entero con signo.

[editar] Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 3467 C++20 bool se consideraba un tipo similar a un entero. Se excluyó.
P2325R3 C++20 Se requería el concepto default_initializable. No se requiere.

[editar] Véase también

Especifica que la operación de incremento en un tipo weakly_incrementable es conservadora de la igualdad y que el tipo es equality_comparable.
(concepto) [editar]