Libreria IOS C ++ - Iword

Descrizione

Viene utilizzato per ottenere l'elemento intero dell'array estensibile e restituisce un riferimento all'oggetto di tipo long che corrisponde all'indice idx nell'array estensibile interno.

Se idx è un indice di un nuovo elemento e l'array estensibile interno non è abbastanza lungo (o non è ancora allocato), la funzione lo estende (o lo alloca) con tutti gli elementi inizializzati zero necessari.

Il riferimento restituito è garantito almeno fino a quando non viene eseguita un'altra operazione sull'oggetto stream, inclusa un'altra chiamata a iword. Una volta eseguita un'altra operazione, il riferimento potrebbe non essere più valido, sebbene una chiamata successiva a questa stessa funzione con lo stesso argomento idx restituisca un riferimento allo stesso valore all'interno dell'array estensibile interno.

L'array estensibile interno è un array generico di oggetti di tipo long (se si accede con il membro iword) o void * (se si accede con il membro pword). Le biblioteche possono implementare questo array in diversi modi: iword e pword possono condividere o meno un array univoco, e possono anche non essere array, ma qualche altra struttura di dati.

Dichiarazione

Di seguito è riportata la dichiarazione per la funzione ios_base :: iword.

long& iword (int idx);

Parametri

idx- Un valore di indice per un elemento dell'array estensibile interno. Alcune implementazioni prevedono che idx sia un valore precedentemente restituito dal membro xalloc.

Valore di ritorno

Un riferimento all'elemento nell'array estensibile interno il cui indice è idx. Questo valore viene restituito come riferimento a un oggetto di tipo long. Oppure viene restituito un valore long & inizializzato su 0L valido e (se l'oggetto stream eredita da basic_ios) viene impostato il flag di stato badbit.

Eccezioni

Basic guarantee - se viene generata un'eccezione, il flusso è in uno stato valido.

Gare di dati

Può modificare l'oggetto stream. Il valore restituito può essere utilizzato anche per modificarlo. L'accesso simultaneo allo stesso oggetto flusso può causare gare di dati.

Esempio

Nell'esempio seguente viene illustrata la funzione 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;
}

Compiliamo ed eseguiamo il programma sopra, questo produrrà il seguente risultato:

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