Namespaces
Variants

std::basic_istream<CharT,Traits>:: get

From cppreference.net
int_type get ( ) ;
(1)
basic_istream & get ( char_type & ch ) ;
(2)
basic_istream & get ( char_type * s, std:: streamsize count ) ;
(3)
basic_istream & get ( char_type * s, std:: streamsize count, char_type delim ) ;
(4)
basic_istream & get ( basic_streambuf & strbuf ) ;
(5)
basic_istream & get ( basic_streambuf & strbuf, char_type delim ) ;
(6)

Extrae carácter o caracteres del flujo.

Todas las versiones se comportan como UnformattedInputFunction s . Después de construir y verificar el objeto centinela, estas funciones realizan lo siguiente:

1) Lee un carácter y lo devuelve si está disponible. De lo contrario, devuelve Traits :: eof ( ) y establece failbit y eofbit .
2) Lee un carácter y lo almacena en ch si está disponible. De lo contrario, deja ch sin modificar y establece failbit y eofbit . Nótese que esta función no está sobrecargada para los tipos signed char y unsigned char , a diferencia del operador de entrada de caracteres con formato operator>>.
3) Igual que get ( s, count, widen ( ' \n ' ) ) , es decir, lee como máximo std:: max ( 0 , count - 1 ) caracteres y los almacena en la cadena de caracteres apuntada por s hasta encontrar ' \n ' .
4) Lee caracteres y los almacena en las ubicaciones sucesivas del arreglo de caracteres cuyo primer elemento es apuntado por s . Los caracteres se extraen y almacenan hasta que ocurra cualquiera de las siguientes condiciones:
  • count es menor que 1 o se han almacenado count - 1 caracteres.
  • ocurre una condición de fin de archivo en la secuencia de entrada (se llama a setstate ( eofbit ) ).
  • el siguiente carácter de entrada disponible c es igual a delim , determinado por Traits :: eq ( c, delim ) . Este carácter no se extrae (a diferencia de getline() ).
En cualquier caso, si count > 0 , se almacena un carácter nulo ( CharT ( ) en la siguiente posición sucesiva del array.
5) Igual que get ( strbuf, widen ( ' \n ' ) ) , es decir, lee los caracteres disponibles y los inserta en el objeto basic_streambuf dado hasta que se encuentra ' \n ' .
6) Lee caracteres y los inserta en la secuencia de salida controlada por el objeto basic_streambuf dado. Los caracteres se extraen e insertan en strbuf hasta que ocurra cualquiera de las siguientes condiciones:
  • se produce una condición de fin de archivo en la secuencia de entrada.
  • la inserción en la secuencia de salida falla (en cuyo caso el carácter que no se pudo insertar no se extrae).
  • el siguiente carácter disponible en la entrada c es igual a delim , determinado por Traits :: eq ( c, delim ) . Este carácter no se extrae.
  • ocurre una excepción (en cuyo caso la excepción se captura y no se relanza).

Si no se extrajo ningún carácter, llama a setstate ( failbit ) .

Todas las versiones establecen el valor de gcount() al número de caracteres extraídos.

Contenidos

Parámetros

ch - referencia al carácter donde escribir el resultado
s - puntero a la cadena de caracteres donde almacenar los caracteres
count - tamaño de la cadena de caracteres apuntada por s
delim - carácter delimitador para detener la extracción. No se extrae ni se almacena
strbuf - búfer de flujo para leer el contenido

Valor de retorno

1) El carácter extraído o Traits :: eof ( ) .
2-6) * this

Excepciones

failure if an error occurred (the error state flag is not goodbit ) and exceptions() is set to throw for that state.

Si una operación interna lanza una excepción, esta es capturada y badbit se establece. Si exceptions() está configurado para badbit , la excepción se relanza.

Ejemplo

#include <iostream>
#include <sstream>
int main()
{
    std::istringstream s1("Hello, world.");
    char c1 = s1.get(); // lee 'H'
    std::cout << "after reading " << c1 << ", gcount() == " <<  s1.gcount() << '\n';
    char c2;
    s1.get(c2);         // lee 'e'
    char str[5];
    s1.get(str, 5);     // lee "llo,"
    std::cout << "after reading " << str << ", gcount() == " <<  s1.gcount() << '\n';
    std::cout << c1 << c2 << str;
    s1.get(*std::cout.rdbuf()); // lee el resto, sin incluir '\n'
    std::cout << "\nAfter the last get(), gcount() == " << s1.gcount() << '\n';
}

Salida:

after reading H, gcount() == 1
after reading llo,, gcount() == 4
Hello, world.
After the last get(), gcount() == 7

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 370 C++98 el efecto de la sobrecarga (5) era get ( s, count, widen ( ' \n ' ) ) ,
que es el efecto de la sobrecarga (3)
corregido a
get ( strbuf, widen ( ' \n ' ) )
LWG 531 C++98 las sobrecargas (3,4) no podían manejar el
caso donde count no es positivo
no se extrae ningún carácter
en este caso

Véase también

extrae bloques de caracteres
(función miembro pública)
extrae datos formateados
(función miembro pública)
extrae caracteres y arreglos de caracteres
(plantilla de función)