Biblioteca IOS de C ++ - Iword

Descripción

Se utiliza para obtener un elemento entero de una matriz extensible y devuelve una referencia al objeto de tipo long que corresponde al índice idx en la matriz extensible interna.

Si idx es un índice de un nuevo elemento y la matriz extensible interna no es lo suficientemente larga (o aún no está asignada), la función la extiende (o la asigna) con tantos elementos inicializados en cero como sea necesario.

Se garantiza que la referencia devuelta es válida al menos hasta que se realice otra operación en el objeto de flujo, incluida otra llamada a iword. Una vez que se realiza otra operación, la referencia puede dejar de ser válida, aunque una llamada posterior a esta misma función con el mismo argumento idx devuelve una referencia al mismo valor dentro de la matriz extensible interna.

La matriz extensible interna es una matriz de propósito general de objetos de tipo long (si se accede con el miembro iword) o void * (si se accede con el miembro pword). Las bibliotecas pueden implementar esta matriz de diversas formas: iword y pword pueden o no compartir una matriz única, y es posible que ni siquiera sean matrices, sino alguna otra estructura de datos.

Declaración

A continuación se muestra la declaración de la función ios_base :: iword.

long& iword (int idx);

Parámetros

idx- Un valor de índice para un elemento de la matriz extensible interna. Algunas implementaciones esperan que idx sea un valor devuelto previamente por el miembro xalloc.

Valor devuelto

Una referencia al elemento de la matriz extensible interna cuyo índice es idx. Este valor se devuelve como una referencia a un objeto de tipo long. O bien se devuelve un long & inicializado válido a 0L, y (si el objeto de flujo hereda de basic_ios) se establece la bandera de estado badbit.

Excepciones

Basic guarantee - si se lanza una excepción, el flujo está en un estado válido.

Carreras de datos

Puede modificar el objeto de flujo. El valor devuelto también se puede utilizar para modificarlo. El acceso simultáneo al mismo objeto de flujo puede provocar carreras de datos.

Ejemplo

En el siguiente ejemplo se explica la función 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;
}

Compilemos y ejecutemos el programa anterior, esto producirá el siguiente resultado:

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