Bibliothèque C ++ IOS - Iword

La description

Il est utilisé pour obtenir l'élément entier du tableau extensible et renvoie une référence à l'objet de type long qui correspond à l'index idx dans le tableau extensible interne.

Si idx est un index vers un nouvel élément et que le tableau extensible interne n'est pas assez long (ou n'est pas encore alloué), la fonction l'étend (ou l'alloue) avec autant d'éléments initialisés à zéro que nécessaire.

La référence renvoyée est garantie d'être valide au moins jusqu'à ce qu'une autre opération soit effectuée sur l'objet de flux, y compris un autre appel à iword. Une fois qu'une autre opération est effectuée, la référence peut devenir invalide, bien qu'un appel ultérieur à cette même fonction avec le même argument idx renvoie une référence à la même valeur dans le tableau extensible interne.

Le tableau extensible interne est un tableau à usage général d'objets de type long (si accessible avec le membre iword) ou void * (si accessible avec le membre pword). Les bibliothèques peuvent implémenter ce tableau de diverses manières: iword et pword peuvent ou non partager un tableau unique, et ils peuvent même ne pas être des tableaux, mais une autre structure de données.

Déclaration

Voici la déclaration de la fonction ios_base :: iword.

long& iword (int idx);

Paramètres

idx- Une valeur d'index pour un élément du tableau extensible interne. Certaines implémentations s'attendent à ce que idx soit une valeur précédemment renvoyée par le membre xalloc.

Valeur de retour

Une référence à l'élément dans le tableau extensible interne dont l'index est idx. Cette valeur est renvoyée en tant que référence à un objet de type long, sinon un long & initialisé à 0L valide est renvoyé, et (si l'objet de flux hérite de basic_ios) l'indicateur d'état de badbit est défini.

Exceptions

Basic guarantee - si une exception est levée, le flux est dans un état valide.

Courses de données

Peut modifier l'objet de flux. La valeur renvoyée peut également être utilisée pour la modifier. L'accès simultané au même objet de flux peut provoquer des courses de données.

Exemple

L'exemple ci-dessous explique la fonction ios_base :: iword.

#include <iostream>     

std::ostream& Counter (std::ostream& os) {
   const static int index = os.xalloc();
   return os << ++os.iword(index);
}

int main() {
   std::cout << Counter << ": first line\n";
   std::cout << Counter << ": second line\n";
   std::cout << Counter << ": third line\n";
  
   std::cerr << Counter << ": error line\n";
   return 0;
}

Compilons et exécutons le programme ci-dessus, cela produira le résultat suivant -

1: first line
2: second line
3: third line
1: error line