std:: basic_const_iterator
|
Défini dans l'en-tête
<iterator>
|
||
|
template
<
std::
input_iterator
Iter
>
class basic_const_iterator ; |
(depuis C++23) | |
std::basic_const_iterator
est un adaptateur d'itérateur qui se comporte exactement comme l'itérateur sous-jacent (qui doit être au moins un
LegacyInputIterator
ou modéliser
input_iterator
), sauf que le déréférencement convertit la valeur retournée par l'itérateur sous-jacent en immuable. Les spécialisations de
std::basic_const_iterator
sont des itérateurs constants, c'est-à-dire que l'itérateur ne peut jamais être utilisé comme un itérateur de sortie car la modification des éléments n'est pas autorisée.
Table des matières |
Types membres
| Type de membre | Définition |
iterator_category
(conditionnellement présent) |
Si
Sinon, il n'y a pas de membre
|
iterator_concept
|
|
value_type
|
std:: iter_value_t < Iter > |
difference_type
|
std:: iter_difference_t < Iter > |
reference
(privé)
|
std::
iter_const_reference_t
<
Iter
>
( type de membre d'exposition uniquement* ) |
Objets membres
| Nombre du membre | Définition |
current
(privé)
|
l'itérateur sous-jacent à partir duquel
base()
copie ou déplace
( objet membre d'exposition uniquement* ) |
Fonctions membres
construit un nouveau
basic_const_iterator
(fonction membre publique) |
|
|
accède à l'itérateur sous-jacent
(fonction membre publique) |
|
|
accède à l'élément pointé
(fonction membre publique) |
|
|
accède à un élément par index
(fonction membre publique) |
|
|
avance ou décrémente l'itérateur
(fonction membre publique) |
|
|
convertit en tout itérateur constant vers lequel un itérateur sous-jacent peut être convertible
(fonction membre publique) |
|
|
compare les itérateurs sous-jacents
(fonction membre publique) |
Fonctions non membres
compare
basic_const_iterator
avec un itérateur non-
basic_const_iterator
(modèle de fonction) |
|
|
(C++23)
|
avance ou décrémente l'itérateur
(modèle de fonction) |
|
(C++23)
|
calcule la distance entre deux adaptateurs d'itérateur
(modèle de fonction) |
|
(C++23)
|
convertit le résultat du déréférencement de l'itérateur sous-jacent en son type de référence rvalue associé
(fonction) |
Classes d'assistance
détermine le type commun d'un itérateur et d'un type
basic_const_iterator
adapté
(spécialisation de modèle de classe) |
Modèles d'alias d'assistance
|
template
<
std::
input_iterator
I
>
using const_iterator = /* voir description */ ; |
(depuis C++23) | |
Si
I
modélise
constant-iterator
(un concept d'exposition uniquement), alors
const_iterator
<
I
>
dénote un type
I
. Sinon,
basic_const_iterator
<
I
>
.
|
template
<
std::
semiregular
S
>
using const_sentinel = /* voir description */ ; |
(depuis C++23) | |
Si
S
modélise
input_iterator
, alors
const_sentinel
<
S
>
dénote un type
const_iterator
<
S
>
. Sinon,
S
.
Modèles de fonctions auxiliaires
|
template
<
std::
input_iterator
T
>
constexpr const_iterator < T > make_const_iterator ( I it ) { return it ; } |
(depuis C++23) | |
|
template
<
std::
semiregular
S
>
constexpr const_sentinel < S > make_const_sentinel ( S s ) { return s ; } |
(depuis C++23) | |
Notes
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_ranges_as_const
|
202207L
|
(C++23) |
std::basic_const_iterator
|
202311L
|
(C++23)
(DR) |
std::basic_const_iterator
devrait suivre la convertibilité de son type sous-jacent
|
Exemple
#include <cassert> #include <iterator> #include <vector> int main() { std::vector v{1, 2, 3}; std::vector<int>::iterator i = v.begin(); *i = 4; // OK, v[0] == 4 maintenant i[1] = 4; // OK, identique à *(i + 1) = 4; auto ci = std::make_const_iterator(i); assert(*ci == 4); // OK, peut lire l'objet sous-jacent assert(ci[0] == 4); // OK, idem // *ci = 13; // Erreur : l'emplacement est en lecture seule // ci[0] = 13; // Erreur : idem ci.base()[0] = 42; // OK, l'itérateur sous-jacent est modifiable assert(*ci == 42); // OK, l'emplacement sous-jacent v[0] a été modifié }
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| P2836R1 | C++23 |
basic_const_iterator
ne respecte pas la convertibilité de son type sous-jacent
|
opérateur de conversion fourni |