Espacios de nombres
Variantes
Acciones

std::weakly_incrementable

De cppreference.com
< cpp‎ | iterator
 
 
Biblioteca de iteradores
Conceptos de iteradores
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
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){
      typenamestd::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 cvbool) 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]
close