Namespaces
Variants

operator<<,>>(std::basic_string)

De es.cppreference.net
 
 
 
std::basic_string
 
Definido en el encabezado <string>
template< class CharT, class Traits, class Allocator >
std::basic_ostream<CharT, Traits>& 
    operator<<( std::basic_ostream<CharT, Traits>& os, 
                const std::basic_string<CharT, Traits, Allocator>& str );
(1)
template< class CharT, class Traits, class Allocator >
std::basic_istream<CharT, Traits>& 
    operator>>( std::basic_istream<CharT, Traits>& is, 
                std::basic_string<CharT, Traits, Allocator>& str );
(2)
1) Se comporta como un FormattedOutputFunction. Después de construir y verificar el objeto centinela, determina el relleno del formato de salida.

Luego inserta cada carácter de la secuencia resultante seq (el contenido de str más el relleno) en el flujo de salida os como si llamara a os.rdbuf()->sputn(seq, n), donde n es std::max(os.width(), str.size()) Finalmente, llama a os.width(0) para cancelar los efectos de std::setw, si los hay.

Equivalente a return os << std::basic_string_view<CharT, Traits>(str);.

(desde C++17)
2) Se comporta como un FormattedInputFunction. Después de construir y verificar el objeto centinela, que puede omitir el espacio en blanco inicial, primero limpia str con str.erase(), luego lee caracteres de is y los agrega a str como si fuera mediante str.append(1, c), hasta que se cumple una de las siguientes condiciones:
  • N se leen caracteres, donde N es is.width() si is.width() > 0, de otro modo N es str.max_size(),
  • se produce la condición de fin de archivo en el flujo is, o
  • std::isspace(c, is.getloc()) es true para el siguiente carácter c en is (este carácter de espacio en blanco permanece en el flujo de entrada).

Si no se extraen caracteres, entonces std::ios::failbit se establece en is, lo que puede lanzar std::ios_base::failure.

Finalmente, llama a is.width(0) para cancelar los efectos de std::setw, si los hay.

Excepciones

1) Puede lanzar std::ios_base::failure si se lanza una excepción durante la salida.
2) Puede lanzar std::ios_base::failure si no se extraen caracteres de is (por ejemplo, si el stream está al final del archivo, o consiste solo en espacios en blanco), o si se lanza una excepción durante la entrada.

Parámetros

os - un flujo de salida de caracteres
is - un flujo de entrada de caracteres
str - la cadena a insertar o extraer

Valor de retorno

1) os
2) is

Ejemplo

#include <iostream>
#include <sstream>
#include <string>
int main()
{
    std::string greeting = "Hello, whirled!";
    std::istringstream iss(greeting);
    std::string hello_comma, whirled, word;
    iss >> hello_comma;
    iss >> whirled;
    std::cout << greeting << '\n'
              << hello_comma << '\n' << whirled << '\n';
    // Reset the stream
    iss.clear();
    iss.seekg(0);
    while (iss >> word)
        std::cout << '+' << word << '\n';
}

Salida:

Hello, whirled!
Hello,
whirled!
+Hello,
+whirled!

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 25 C++98 n era el menor entre os. width ( ) y str. size ( ) n es el mayor de ellos
LWG 90 C++98 std:: isspace ( c, getloc ( ) ) se usaba para verificar
espacios, pero getloc no está declarado en <string>
reemplazado getloc ( )
con is. getloc ( )
LWG 91 C++98 operator>> no se comportaba
como una FormattedInputFunction
se comporta como una
FormattedInputFunction
LWG 211 C++98 operator>> no establecía failbit si no se extraía ningún carácter establece failbit
LWG 435 C++98 los caracteres se insertaban mediante os. rdbuf ( ) - > sputn ( str. data ( ) , n ) ,
y la resolución de LWG issue 25 hizo el comportamiento
indefinido si os. width ( ) es mayor que str. size ( )
determina el relleno
primero e inserta la secuencia
de caracteres rellenada en su lugar
LWG 586 C++98 operator<< no se comportaba
como una FormattedOutputFunction
se comporta como una
FormattedOutputFunction

Véase también

(C++17)
realiza salida de flujo en string views
(plantilla de función)