Namespaces
Variants

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

From 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 una 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) al 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 una FormattedInputFunction . Tras construir y verificar el objeto centinela, que puede omitir espacios en blanco iniciales, primero limpia str con str. erase ( ) , luego lee caracteres de is y los añade a str como si fuera mediante str. append ( 1 , c ) , hasta que una de las siguientes condiciones se cumpla:
  • N caracteres son leídos, donde N es is. width ( ) si is. width ( ) > 0 , de lo contrario N es str. max_size ( ) ,
  • ocurre 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 extrae ningún carácter, entonces std::ios::failbit se establece en is , lo cual puede lanzar std::ios_base::failure .

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

Contenidos

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)