std::ios_base:: iword
|
long
&
iword
(
int
index
)
;
|
||
Tout d'abord, alloue ou redimensionne le stockage privé (tableau dynamique de long ou une autre structure de données indexable) suffisamment pour rendre index un index valide, puis retourne une référence à l'élément long du stockage privé avec l'index index .
La référence peut être invalidée par toute opération sur cet
ios_base
objet, y compris un autre appel à
iword()
, mais les valeurs stockées sont conservées, de sorte que la lecture de
iword
(
index
)
avec le même index ultérieurement produira la même valeur jusqu'au prochain appel à
std::basic_ios::copyfmt()
. La valeur peut être utilisée à n'importe quelle fin. L'index de l'élément doit être obtenu par un appel préalable à
xalloc()
, sinon le comportement est indéfini. Les nouveaux éléments sont initialisés à
0
.
Si la fonction échoue (éventuellement à cause d'un échec d'allocation) et que
*
this
est un sous-objet de classe de base d'un objet
basic_ios<>
ou sous-objet, appelle
std::
basic_ios
<>
::
setstate
(
badbit
)
qui peut lever
std::ios_base::failure
.
Table des matières |
Notes
L'utilisation typique du stockage iword est de transmettre des informations (par exemple, des indicateurs de formatage personnalisés) depuis des manipulateurs d'E/S définis par l'utilisateur vers
operator<<
et
operator>>
définis par l'utilisateur, ou vers des facettes de formatage personnalisées imbriquées dans les flux standards.
Paramètres
| index | - | valeur d'index de l'élément |
Valeur de retour
Une référence à l'élément.
Exceptions
Peut lever std::ios_base::failure lors de la définition du badbit.
Exemple
#include <iostream> #include <string> struct Foo { static int foo_xalloc; std::string data; Foo(const std::string& s) : data(s) {} }; // Allocates the iword storage for use with Foo objects int Foo::foo_xalloc = std::ios_base::xalloc(); // This user-defined operator<< prints the string in reverse if the iword holds 1 std::ostream& operator<<(std::ostream& os, Foo& f) { if (os.iword(Foo::foo_xalloc) == 1) return os << std::string(f.data.rbegin(), f.data.rend()); else return os << f.data; } // This I/O manipulator flips the number stored in iword between 0 and 1 std::ios_base& rev(std::ios_base& os) { os.iword(Foo::foo_xalloc) = !os.iword(Foo::foo_xalloc); return os; } int main() { Foo f("example"); std::cout << f << '\n' << rev << f << '\n' << rev << f << '\n'; }
Sortie :
example elpmaxe example
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é |
|---|---|---|---|
| LWG 36 | C++98 |
la valeur stockée pourrait ne pas être
conservée si la référence est invalidée |
la valeur stockée est conservée
jusqu'au prochain appel de
copyfmt()
|
| LWG 41 | C++98 |
la fonction définissait badbit elle-même en cas d'échec,
mais
ios_base
ne fournit pas une telle interface
|
badbit est défini par
basic_ios
(si * this est son sous-objet de classe de base) |
Voir aussi
|
redimensionne le stockage privé si nécessaire et donne accès à l'élément
void
*
à l'index donné
(fonction membre publique) |
|
|
[static]
|
retourne un entier unique à l'échelle du programme qui peut être utilisé en toute sécurité comme index pour
pword()
et
iword()
(fonction membre publique statique) |