Namespaces
Variants

std::ios_base:: iword

From cppreference.net
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)