operator<<,>>(std::basic_string)
De es.cppreference.net
| 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 |
(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:
Nse leen caracteres, dondeNesis.width()siis.width() > 0, de otro modoNesstr.max_size(),- se produce la condición de fin de archivo en el flujo
is, o std::isspace(c, is.getloc())estruepara el siguiente caráctercenis(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.
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
Ejecutar este código
#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) |