basic_istream (Clase)

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Describe un objeto que controla la extracción de los elementos y objetos codificados de un búfer de secuencia con elementos de tipo Elem, también conocida como char_type, cuyos rasgos de carácter están determinadas por la clase Tr, también conocida como traits_type.

template <class Elem, class Tr = char_traits<Elem>>  
class basic_istream       : virtual public basic_ios<Elem, Tr>  

La mayoría de los miembros funciones esa sobrecarga operador >> se da formato a las funciones de entrada. Siguen el patrón:

iostate state = goodbit;  
const sentry ok(*this);

if (ok)  
 {try  
 {<extract elements and convert  
    accumulate flags in state  
    store a successful conversion> }  
    catch (...)  
 {try  
 {setstate(badbit);

}  
    catch (...)  
 {}  
    if ((exceptions()& badbit) != 0)  
    throw; }}  
setstate(state);

return (*this);

Muchas otras funciones miembro son funciones de entrada sin formato. Siguen el patrón:

iostate state = goodbit;  
count = 0;    // the value returned by gcount  
const sentry ok(*this, true);

if (ok)  
 {try  
 {<extract elements and deliver  
    count extracted elements in count  
    accumulate flags in state> }  
    catch (...)  
 {try  
 {setstate(badbit);

}  
    catch (...)  
 {}  
    if ((exceptions()& badbit) != 0)  
    throw; }}  
setstate(state);

Ambos grupos de funciones llamada setstate( eofbit) si tienen un fin de archivo al extraer elementos.

Un objeto de clase basic_istream < Elem, Tr> almacena:

  • Un objeto base público virtual de clase basic_ios< Elem, Tr> .

  • Un recuento de extracción para la última operación de entrada sin formato (llamado recuento en el código anterior).

Vea el ejemplo de basic_ifstream (clase) para obtener más información acerca de los flujos de entrada.

Constructores

basic_istreamConstruye un objeto de tipo basic_istream.

Funciones miembro

gcountDevuelve el número de caracteres leídos durante la última entrada sin formato.
getLee uno o varios caracteres del flujo de entrada.
getLineLee una línea del flujo de entrada.
OmitirHace que se omita una serie de elementos desde la posición de lectura actual.
PeekDevuelve el siguiente carácter que se debe leer.
putbackColoca un carácter especificado en la secuencia.
leerLee un número especificado de caracteres de la secuencia y los almacena en una matriz.
readsomeSolo lee del búfer.
seekgMueve la posición de lectura de una secuencia.
SentryLa clase anidada describe un objeto cuya declaración estructura las funciones de entrada con y sin formato.
intercambioIntercambia este objeto basic_istream por el parámetro del objeto basic_istream proporcionado.
sincronizaciónSincroniza el dispositivo de entrada asociado a la secuencia con el búfer de la secuencia.
tellgNotifica la posición de lectura actual en la secuencia.
ungetDevuelve el último carácter leído a la secuencia.

Operadores

operador >>Llama a una función del flujo de entrada o lee datos con formato del flujo de entrada.
operador =Asigna a este objeto el basic_istream de la parte derecha del operador. Se trata de una asignación de movimiento con una referencia rvalue que no deja ninguna copia.

Encabezado:<>>

Espacio de nombres: std

Construye un objeto de tipo basic_istream.

explicit basic_istream(
    basic_streambuf<Elem, Tr>* strbuf,  
    bool _Isstd = false);

basic_istream(basic_istream&& right);

Parámetros

strbuf
Un objeto de tipo basic_streambuf.

_Isstd
trueSi se trata de una secuencia estándar; de lo contrario, false.

right
Un basic_istream objeto que se va a copiar.

Comentarios

El primer constructor inicializa la clase base mediante una llamada a init(_S trbuf). También almacena cero en el recuento de extracción. Para obtener más información acerca de este número de extracción, consulte la sección Comentarios de la basic_istream (clase) tema de información general.

El segundo constructor inicializa la clase base mediante una llamada a move``( right). También almacena _R ight.gcount() en el recuento de extracción y almacenes de cero en el recuento de extracción para _R ight.

Ejemplo

Vea el ejemplo de basic_ifstream:: basic_ifstream para obtener más información acerca de los flujos de entrada.

Devuelve el número de caracteres leídos durante la última entrada sin formato.

streamsize gcount() const;

Valor devuelto

El recuento de extracción.

Comentarios

Utilice basic_istream:: Get para leer caracteres sin formato.

Ejemplo

// basic_istream_gcount.cpp  
// compile with: /EHsc  
#include <iostream>  
using namespace std;  
  
int main( )   
{  
   cout << "Type the letter 'a': ";  
  
   ws( cin );  
   char c[10];  
  
   cin.get( &c[0],9 );  
   cout << c << endl;  
  
   cout << cin.gcount( ) << endl;  
}  

  
      aType the letter 'a':  
a  
1  

Lee uno o varios caracteres del flujo de entrada.

int_type get();

basic_istream<Elem, Tr>& get(
    Elem& _Ch);

basic_istream<Elem, Tr>& get(
    Elem* str,  
    streamsize count);

basic_istream<Elem, Tr>& get(
    Elem* str,  
    streamsize count,  
    Elem _Delim);

basic_istream<Elem, Tr>& get(
    basic_streambuf<Elem, Tr>& strbuf);

basic_istream<Elem, Tr>& get(
    basic_streambuf<Elem, Tr>& strbuf,  
    Elem _Delim);

Parámetros

count
El número de caracteres que se va a leer desde strbuf.

_Delim
El carácter que debe finalizar la lectura, si se encuentra antes de count.

str
Una cadena en la que se va a escribir.

_Ch
Un carácter que se va a obtener.

strbuf
Búfer en el que se va a escribir.

Valor devuelto

El formulario sin parámetros de get devuelve el elemento que se lea como un entero o el final del archivo. Los formularios restantes devuelven la secuencia (* this).

Comentarios

La primera de estas funciones de entrada sin formato extrae un elemento, si es posible, como si devolver por rdbuf -> sbumpc. De lo contrario, devuelve traits_type::eof. Si la función no extrae ningún elemento, llama a setstate( failbit).

La segunda función extrae la int_type elemento meta del mismo modo. Si meta compara es igual a traits_type::eof, las llamadas de función setstate( failbit). De lo contrario, almacena traits_type::to_char_type( meta) en _Ch. La función devuelve ** *esto**.

The third function returns get(_ Str, count, widen('\ n')).

La cuarta función extrae hasta count - 1 elementos y los almacena en la matriz a partir de _ Str. Siempre almacena char_type después de alguna extraen almacena los elementos. En el orden de las pruebas, la extracción se detiene:

  • Al final del archivo.

  • Después de que la función extrae un elemento que es igual a _Delim, en cuyo caso el elemento se vuelve a colocar en la secuencia controlada.

  • Después de que la función extrae count - 1 elementos.

Si la función no extrae ningún elemento, llama a setstate( failbit). En cualquier caso, devuelve ** *esto**.

Devuelve la función quinta obtener( strbuf, widen('\ n')).

Extrae los elementos y los inserta en la función sexta strbuf. La extracción se detiene en el final del archivo o en un elemento que es igual al _ Delim, que no se extraen. También detiene, sin extraer el elemento en cuestión, si se produce un error de una inserción o produce una excepción (que es detectada, pero no vuelve a generar). Si la función no extrae ningún elemento, llama a setstate( failbit). En cualquier caso, la función devuelve ** *esto**.

Ejemplo

// basic_istream_get.cpp  
// compile with: /EHsc  
#include <iostream>  
using namespace std;  
  
int main( )   
{  
   char c[10];  
  
   c[0] = cin.get( );  
   cin.get( c[1] );  
   cin.get( &c[2],3 );  
   cin.get( &c[4], 4, '7' );  
  
   cout << c << endl;  
}  

  
1111  

Obtiene una línea de la secuencia de entrada.

basic_istream<Elem, Tr>& getline(
    char_type* str,   
    streamsize count);

basic_istream<Elem, Tr>& getline(
    char_type* str,   
    streamsize count,   
    char_type _Delim);

Parámetros

count
El número de caracteres que se va a leer desde strbuf.

_Delim
El carácter que debe finalizar la lectura, si se encuentra antes de count.

str
Una cadena en la que se va a escribir.

Valor devuelto

La secuencia ( ** *esto**).

Comentarios

Devuelve las funciones de entrada de la primera de ellas sin formato getline(_ Str, count, widen(' \ n')).

La segunda función extrae hasta count - 1 elementos y los almacena en la matriz a partir de _ Str. Siempre se almacena el carácter de terminación de cadena después de los elementos extraídos almacena. En el orden de las pruebas, la extracción se detiene:

  • Al final del archivo.

  • Después de que la función extrae un elemento que es igual a _Delim, en cuyo caso el elemento es no vuelve a colocar ni se anexa a la secuencia controlada.

  • Después de que la función extrae count - 1 elementos.

Si la función no extrae ningún elemento o count - 1 elementos, llama setstate( failbit). En cualquier caso, devuelve ** *esto**.

Ejemplo

// basic_istream_getline.cpp  
// compile with: /EHsc  
#include <iostream>  
using namespace std;  
  
int main( )   
{  
   char c[10];  
  
   cin.getline( &c[0], 5, '2' );  
   cout << c << endl;  
}  

Hace que se omita una serie de elementos desde la posición de lectura actual.

basic_istream<Elem, Tr>& ignore(
    streamsize count = 1,  
    int_type _Delim = traits_type::eof());

Parámetros

count
El número de elementos que se van a omitir de la actual posición de lectura.

_Delim
El elemento, si se encuentra antes de recuento, que hace que omitir para devolver y permitir que todos los elementos después de _Delim a leerse.

Valor devuelto

La secuencia ( ** *esto**).

Comentarios

La función de entrada sin formato extrae hasta count elementos y los descarta. Si count es igual a numeric_limits<>>:: max, sin embargo, se toma como arbitrariamente grande. La extracción se detiene al principio en el final del archivo o en un elemento _Ch que traits_type::to_int_type( _Ch) compara es igual a _ Delim (que también se extrae). La función devuelve ** *esto**.

Ejemplo

// basic_istream_ignore.cpp  
// compile with: /EHsc  
#include <iostream>  
int main( )   
{  
   using namespace std;  
   char chararray[10];  
   cout << "Type 'abcdef': ";  
   cin.ignore( 5, 'c' );  
   cin >> chararray;  
   cout << chararray;  
}  

  
abcdef  
  

  
abcdefdef  

Llama a una función del flujo de entrada o lee datos con formato del flujo de entrada.

basic_istream& operator>>(
    basic_istream& (* _Pfn)(basic_istream&));

basic_istream& operator>>(
    ios_base& (* _Pfn)(ios_base&));

basic_istream& operator>>(
    basic_ios<Elem, Tr>& (* _Pfn)(basic_ios<Elem, Tr>&))  
;  
basic_istream& operator>>(
    basic_streambuf<Elem, Tr>* strbuf);

basic_istream& operator>>(
    bool& val);

basic_istream& operator>>(
    short& val);

basic_istream& operator>>(
    unsigned short& val);

basic_istream& operator>>(
    int& val);

basic_istream& operator>>(
    unsigned int& val);

basic_istream& operator>>(
    long& val);

basic_istream& operator>>(
    unsigned long& val);

basic_istream& operator>>(
    long long& val);

basic_istream& operator>>(
    unsigned long long& val);

basic_istream& operator>>(
    void *& val);

basic_istream& operator>>(
    float& val);

basic_istream& operator>>(
    double& val);

basic_istream& operator>>(
    long double& val);

Parámetros

_Pfn
Un puntero a función.

strbuf
Un objeto de tipo stream_buf.

val
Valor que se va a leer de la secuencia.

Valor devuelto

La secuencia ( ** *esto**).

Comentarios

El <istream> encabezado también define varios operadores de extracción global. Para obtener más información, consulte operador >> (<>>).

La primera función miembro garantiza que una expresión de la forma istr >> ws llamadas ws( istr) y, a continuación, devuelve ** *esto**. Las funciones segunda y tercera asegurarse de que los demás manipuladores como hexadecimal, se comportan de forma similar. Las funciones restantes constituyen las funciones de entrada con formato.

La función:

basic_istream& operator>>(
    basic_streambuf<Elem, Tr>* strbuf);

extrae los elementos, si _ Strbuf no es un puntero nulo y los inserta en strbuf. La extracción se detiene en el final del archivo. También se detiene sin extraer el elemento en cuestión, si se produce un error de una inserción o produce una excepción (que es detectada, pero no vuelve a generar). Si la función no extrae ningún elemento, llama a setstate( failbit). En cualquier caso, la función devuelve ** *esto**.

La función:

basic_istream& operator>>(bool& val);

extrae un campo y lo convierte en un valor booleano llamando a use_facet < num_get< Elem, InIt> ( getloc). get( InIt( rdbuf), Init(0), *this, getloc, val). Aquí, InIt se define como istreambuf_iterator< Elem, Tr>. La función devuelve ** *esto**.

Las funciones:

basic_istream& operator>>(short& val);

basic_istream& operator>>(unsigned short& val);

basic_istream& operator>>(int& val);

basic_istream& operator>>(unsigned int& val);

basic_istream& operator>>(long& val);

basic_istream& operator>>(unsigned long& val);

 
basic_istream& operator>>(long long& val);

basic_istream& operator>>(unsigned long long& val);

 
basic_istream& operator>>(void *& val);

cada extraer un campo y lo convierten en un valor numérico mediante una llamada a use_facet < num_get < Elem, InIt> ( getloc). get( InIt( rdbuf), Init(0), *this, getloc, val). Here, InIt is defined as istreambuf_iterator< Elem, Tr>, and val has type long,unsigned long, or void * as needed.

Si el valor convertido no se puede representar como el tipo de val, las llamadas de función setstate( failbit). En cualquier caso, la función devuelve ** *esto**.

Las funciones:

basic_istream& operator>>(float& val);

basic_istream& operator>>(double& val);

basic_istream& operator>>(long double& val);

cada extraer un campo y lo convierten en un valor numérico mediante una llamada a use_facet < num_get < Elem, InIt> ( getloc). get( InIt( rdbuf), Init(0), *this, getloc, val). Here, InIt is defined as istreambuf_iterator< Elem, Tr>, and val has type double or long double as needed.

Si el valor convertido no se puede representar como el tipo de val, las llamadas de función setstate( failbit). En cualquier caso, devuelve ** *esto**.

Ejemplo

// istream_basic_istream_op_is.cpp  
// compile with: /EHsc  
#include <iostream>  
  
using namespace std;  
  
ios_base& hex2( ios_base& ib )   
{  
   ib.unsetf( ios_base::dec );  
   ib.setf( ios_base::hex );  
   return ib;  
}  
  
basic_istream<char, char_traits<char> >& somefunc(basic_istream<char, char_traits<char> > &i)  
{  
   if ( i == cin )   
   {  
      cerr << "i is cin" << endl;  
   }  
   return i;  
}  
  
int main( )   
{  
   int i = 0;  
   cin >> somefunc;  
   cin >> i;  
   cout << i << endl;  
   cin >> hex2;  
   cin >> i;  
   cout << i << endl;  
}  

Asigna a este objeto el basic_istream de la parte derecha del operador. Se trata de una asignación de movimiento con una referencia rvalue que no deja ninguna copia.

basic_istream& operator=(basic_istream&& right);

Parámetros

right
Referencia rvalue a un objeto basic_ifstream.

Valor devuelto

Devuelve *this.

Comentarios

El operador de miembro llama intercambio ( right).

Devuelve el siguiente carácter que se debe leer.

int_type peek();

Valor devuelto

El siguiente carácter que se leerá.

Comentarios

La función de entrada sin formato extrae un elemento, si es posible, como si devolver por rdbuf -> sgetc. De lo contrario, devuelve traits_type::eof.

Ejemplo

// basic_istream_peek.cpp  
// compile with: /EHsc  
#include <iostream>  
using namespace std;  
  
int main( )   
{  
   char c[10], c2;  
   cout << "Type 'abcde': ";  
  
   c2 = cin.peek( );  
   cin.getline( &c[0], 9 );  
  
   cout << c2 << " " << c << endl;  
}  

  
abcde  
  

  
      abcdeType 'abcde': abcde  
a abcde  

Coloca un carácter especificado en la secuencia.

basic_istream<Elem, Tr>& putback(
    char_type _Ch);

Parámetros

_Ch
Un carácter que se vuelva a poner en la secuencia.

Valor devuelto

La secuencia ( ** *esto**).

Comentarios

El función de entrada sin formato retrocede _Ch, si es posible, como si se llamara a rdbuf->sputbackc. Si rdbuf es un puntero nulo, o si la llamada a sputbackc devuelve traits_type::eof, las llamadas de función setstate( badbit). En cualquier caso, devuelve ** *esto**.

Ejemplo

// basic_istream_putback.cpp  
// compile with: /EHsc  
#include <iostream>  
using namespace std;  
  
int main( )   
{  
   char c[10], c2, c3;  
  
   c2 = cin.get( );  
   c3 = cin.get( );  
   cin.putback( c2 );  
   cin.getline( &c[0], 9 );  
   cout << c << endl;  
}  

Lee un número especificado de caracteres de la secuencia y los almacena en una matriz.

Este método es potencialmente inseguro, ya que se basa en el llamador para comprobar que los valores pasados son correctos.

basic_istream<Elem, Tr>& read(
    char_type* str,   
    streamsize count);

Parámetros

str
La matriz en la que se va a leer los caracteres.

count
Número de caracteres que se va a leer.

Valor devuelto

La secuencia ( *this).

Comentarios

La función de entrada sin formato extrae hasta count elementos y los almacena en la matriz a partir de _ Str. La extracción se detiene al principio en el final del archivo, en el que llama a la función de caso setstate( failbit). En cualquier caso, devuelve *this.

Ejemplo

// basic_istream_read.cpp  
// compile with: /EHsc  
#include <iostream>  
using namespace std;  
  
int main()  
{  
    char c[10];  
    int count = 5;  
  
    cout << "Type 'abcde': ";  
  
    // Note: cin::read is potentially unsafe, consider  
    // using cin::_Read_s instead.  
    cin.read(&c[0], count);  
    c[count] = 0;  
  
    cout << c << endl;  
}  

  
abcde  
  

  
      abcdeType 'abcde': abcde  
abcde  

Lee el número especificado de valores de caracteres.

Este método es potencialmente inseguro, ya que se basa en el llamador para comprobar que los valores pasados son correctos.

streamsize readsome(
    char_type* str,  
    streamsize count);

Parámetros

str
La matriz en el que readsome almacena los caracteres que lee.

count
Número de caracteres que se va a leer.

Valor devuelto

El número de caracteres leídos realmente, gcount.

Comentarios

Esta función de entrada sin formato hasta extrae count elementos de la entrada de secuencia y los almacena en la matriz str.

Esta función no esperan la entrada. Lee los datos están disponibles.

Ejemplo

// basic_istream_readsome.cpp  
// compile with: /EHsc /W3  
#include <iostream>  
using namespace std;  
  
int main( )  
{  
   char c[10];  
   int count = 5;  
  
   cout << "Type 'abcdefgh': ";  
  
   // cin.read blocks until user types input.  
   // Note: cin::read is potentially unsafe, consider  
   // using cin::_Read_s instead.  
   cin.read(&c[0], 2);  
  
   // Note: cin::readsome is potentially unsafe, consider  
   // using cin::_Readsome_s instead.  
   int n = cin.readsome(&c[0], count);  // C4996  
   c[n] = 0;  
   cout << n << " characters read" << endl;  
   cout << c << endl;  
}  

Mueve la posición de lectura de una secuencia.

basic_istream<Elem, Tr>& seekg(
    pos_type pos);

basic_istream<Elem, Tr>& seekg(
    off_type off,  
    ios_base::seekdir way);

Parámetros

pos
La posición absoluta en el que se va a mover el puntero de lectura.

off
Un desplazamiento para mover el puntero de lectura relativo a way.

way
Uno de los ios_base:: seekdir enumeraciones.

Valor devuelto

La secuencia ( ** *esto**).

Comentarios

La primera función miembro realiza una búsqueda absoluta, la segunda función miembro realiza una búsqueda relativa.

System_CAPS_ICON_note.jpg Nota

No use la segunda función miembro con archivos de texto, porque no admite el estándar de C++ relativa búsquedas en archivos de texto.

Si producirá un error es false, las llamadas a funciones miembro primera newpos = rdbuf -> pubseekpos( pos), para algunos pos_type objeto temporal newpos. Si producirá un error es false, la segunda función llama newpos = rdbuf -> pubseekoff( off, way). En cualquier caso, si ( off_type) newpos == ( off_type)(-1) (la posición operación produce un error), las llamadas de función istr. SetState( failbit). Ambas funciones devuelven ** *esto**.

Si errores es true, las funciones miembro no hacen nada.

Ejemplo

// basic_istream_seekg.cpp  
// compile with: /EHsc  
#include <iostream>  
#include <fstream>  
  
int main ( )   
{  
   using namespace std;  
   ifstream file;  
   char c, c1;  
  
   file.open( "basic_istream_seekg.txt" );  
   file.seekg(2);   // seek to position 2  
   file >> c;  
   cout << c << endl;  
}  

La clase anidada describe un objeto cuya declaración estructuras de las funciones de entrada sin formato y con formato.

clase sentry {
público:
sentry explícita (basic_istream<Elem, tr="">aspecto _Istr,</Elem,>
BOOL _Noskip = false); operador bool() const; };

Comentarios

Si _Istr``. buena es true, el constructor:

  • Llamadas _Istr. tie -> flush if _Istr. tieno es un puntero nulo

  • Llama eficazmente a ws( _Istr) si _Istr. flags&skipws is nonzero

Si, después de dicha de preparación, _Istr. buena es false, el constructor llama _Istr. SetState( failbit). En cualquier caso, el constructor almacena el valor devuelto por _Istr. buena en estado. Una llamada posterior a operador booleano brinda este valor almacenado.

Intercambia el contenido de dos objetos basic_istream.

void swap(basic_istream& right);

Parámetros

right
Referencia lvalue a un objeto basic_istream.

Comentarios

Las llamadas a funciones miembro basic_ios:: swap(`` right``). También intercambia el recuento de extracción por el recuento de extracción de right.

Sincroniza el dispositivo de entrada asociado a la secuencia con el búfer de la secuencia.

int sync();

Valor devuelto

Si rdbuf es un puntero nulo, la función devuelve -1. De lo contrario, llama a rdbuf -> pubsync. Si eso devuelve -1, la función llama a setstate( badbit) y devuelve -1. De lo contrario, la función devuelve cero.

Notifica la posición de lectura actual en la secuencia.

pos_type tellg();

Valor devuelto

La posición actual en la secuencia.

Comentarios

Si producirá un error es false, devuelve la función miembro rdbuf -> pubseekoff(0, cur, en). De lo contrario, devuelve pos_type(-1).

Ejemplo

// basic_istream_tellg.cpp  
// compile with: /EHsc  
#include <iostream>  
#include <fstream>  
  
int main()  
{  
    using namespace std;  
    ifstream file;  
    char c;  
    streamoff i;  
  
    file.open("basic_istream_tellg.txt");  
    i = file.tellg();  
    file >> c;  
    cout << c << " " << i << endl;  
  
    i = file.tellg();  
    file >> c;  
    cout << c << " " << i << endl;  
}  

Devuelve el último carácter leído a la secuencia.

basic_istream<Elem, Tr>& unget();

Valor devuelto

La secuencia ( ** *esto**).

Comentarios

El función de entrada sin formato vuelve a colocar el elemento anterior en la secuencia, si es posible, como si se llamara a rdbuf -> sungetc. Si rdbuf es un puntero nulo, o si la llamada a sungetc devuelve traits_type::eof, las llamadas de función setstate( badbit). En cualquier caso, devuelve ** *esto**.

Para obtener información acerca de cómo unget podrían fallar, vea basic_streambuf:: sungetc.

Ejemplo

// basic_istream_unget.cpp  
// compile with: /EHsc  
#include <iostream>  
using namespace std;  
  
int main( )   
{  
   char c[10], c2;  
  
   cout << "Type 'abc': ";  
   c2 = cin.get( );  
   cin.unget( );  
   cin.getline( &c[0], 9 );  
   cout << c << endl;  
}  

  
      abcType 'abc': abc  
abc  

Seguridad para subprocesos en la biblioteca estándar de C++
iostream de programación
Convenciones de iostreams

Mostrar: