std::weakly_incrementable
Definido en el archivo de encabezado <iterator>
|
||
template<class I> concept weakly_incrementable = |
(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 ai
. - 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
(C++20) |
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) |