Namespaces
Variants

operator>>(std::basic_istream)

De es.cppreference.net
 
 
 
 
Definido en el encabezado <istream>
template< class CharT, class Traits >
basic_istream<CharT, Traits>&
    operator>>( basic_istream<CharT, Traits>& st, CharT& ch );

template< class Traits >
basic_istream<char, Traits>&
    operator>>( basic_istream<char, Traits>& st, signed char& ch );

template< class Traits >
basic_istream<char, Traits>&
    operator>>( basic_istream<char, Traits>& st, unsigned char& ch );
(1)
template< class CharT, class Traits>
basic_istream<CharT, Traits>&
    operator>>( basic_istream<CharT, Traits>& st, CharT* s );

template< class Traits >
basic_istream<char, Traits>&
    operator>>( basic_istream<char, Traits>& st, signed char* s );

template< class Traits >
basic_istream<char, Traits>&
    operator>>( basic_istream<char, Traits>& st, unsigned char* s );
(2) (hasta C++20)
template< class CharT, class Traits, std::size_t N >
basic_istream<CharT, Traits>&
    operator>>( basic_istream<CharT, Traits>& st, CharT (&s)[N] );

template< class Traits, std::size_t N >
basic_istream<char, Traits>&
    operator>>( basic_istream<char, Traits>& st, signed char (&s)[N] );

template< class Traits, std::size_t N >
basic_istream<char, Traits>&
    operator>>( basic_istream<char, Traits>& st, unsigned char (&s)[N] );
(desde C++20)
template< class Istream, class T >
Istream&&
    operator>>( Istream&& st, T&& value );
(3) (desde C++11)
1,2) Realiza operaciones de entrada de caracteres.
1) Se comporta como una FormattedInputFunction. Después de construir y verificar el objeto centinela, que puede omitir espacios en blanco iniciales, extrae un carácter y lo almacena en ch. Si no hay ningún carácter disponible, establece failbit (además de eofbit que se establece según lo requerido de una FormattedInputFunction).
2) Se comporta como una FormattedInputFunction. Después de construir y verificar el objeto centinela, que puede omitir espacios en blanco iniciales, extrae caracteres sucesivos y los almacena en ubicaciones sucesivas de un arreglo de caracteres cuyo primer elemento está apuntado por(hasta C++20) s. La extracción se detiene si se cumple alguna de las siguientes condiciones:
  • Un carácter de espacio en blanco (según lo determinado por la ctype<CharT> faceta) se encuentra. El carácter de espacio en blanco no se extrae.
  • Si st.width() es mayor que cero, st.width() - 1 caracteres se almacenan.
(hasta C++20)
  • n - 1 caracteres se almacenan, donde n se define de la siguiente manera:
  • Si st.width() es mayor que cero, std::min(std::size_t(st.width()), N);
  • de lo contrario, n es N.
(desde C++20)
  • Ocurre fin de archivo en la secuencia de entrada (esto también establece eofbit).
En cualquier caso, se almacena un valor de carácter nulo adicional CharT() al final de la salida. Si no se extrajeron caracteres, establece failbit (el carácter nulo aún se escribe, en la primera posición de la salida). Finalmente, llama a st.width(0) para cancelar los efectos de std::setw, si los hay.
3) Llama al operador de extracción apropiado, dada una referencia rvalue a un objeto de flujo de entrada (equivalente a st >> std::forward<T>(value)). Esta sobrecarga participa en la resolución de sobrecarga solo si st >> std::forward<T>(value) está bien formada y Istream es un tipo de clase derivado pública e inequívocamente de std::ios_base.

Notas

Extraer un solo carácter que es el último carácter del flujo no establece eofbit : esto es diferente de otras funciones de entrada formateadas, como extraer el último entero con operator >> , pero este comportamiento coincide con el comportamiento de std::scanf con "%c" especificador de formato.

Parámetros

st - flujo de entrada de donde extraer los datos
ch - referencia a un carácter para almacenar el carácter extraído
s - puntero a (until C++20) un arreglo de caracteres para almacenar los caracteres extraídos

Valor de retorno

1,2) st
3) std :: move ( st )

Ejemplo

#include <iomanip>
#include <iostream>
#include <sstream>
int main()
{
    std::string input = "n greetings";
    std::istringstream stream(input);
    char c;
    const int MAX = 6;
    char cstr[MAX];
    stream >> c >> std::setw(MAX) >> cstr;
    std::cout << "c = " << c << '\n'
              << "cstr = " << cstr << '\n';
    double f;
    std::istringstream("1.23") >> f; // rvalue stream extraction
    std::cout << "f = " << f << '\n';
}

Salida:

c = n
cstr = greet
f = 1.23

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 13 C++98 la definición de n mencionaba un nombre inexistente eos reemplazado con CharT ( )
LWG 68 C++98 no se almacenaban caracteres nulos al final de la salida para la sobrecarga (2) almacena un carácter nulo
LWG 1203 C++98 la sobrecarga para flujo de rvalue devolvía referencia lvalue a la clase base devuelve referencia rvalue
a la clase derivada
LWG 2328 C++98 la sobrecarga para flujo de rvalue requería que otro argumento fuera lvalue modificado para aceptar rvalue
LWG 2534 C++98 la sobrecarga para flujo de rvalue no estaba restringida restringida

Véase también

extrae datos formateados
(función miembro pública)