operator<< (std::basic_ostream)
|
Definido en el encabezado
<ostream>
|
||
|
basic_ostream y caracteres
|
||
| (1) | ||
|
template
<
class
CharT,
class
Traits
>
basic_ostream
<
CharT, Traits
>
&
|
||
|
template
<
class
CharT,
class
Traits
>
basic_ostream
<
CharT, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
basic_ostream y arreglo de caracteres
|
||
| (2) | ||
|
template
<
class
CharT,
class
Traits
>
basic_ostream
<
CharT, Traits
>
&
|
||
|
template
<
class
CharT,
class
Traits
>
basic_ostream
<
CharT, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
basic_ostream rvalue
|
||
|
template
<
class
Ostream,
class
T
>
Ostream && operator << ( Ostream && os, const T & value ) ; |
(3) | (desde C++11) |
|
sobrecargas eliminadas para basic_ostream y carácter/matriz UTF
|
||
| (4) | (desde C++20) | |
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
wchar_t
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
wchar_t
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
wchar_t
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
wchar_t
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
wchar_t
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
wchar_t
, Traits
>
&
|
||
Inserta un carácter o una cadena de caracteres.
- Si os. width ( ) > 1 , entonces se añaden os. width ( ) - 1 copias de os. fill ( ) al carácter de salida para formar la secuencia de caracteres de salida.
- Si ( out. flags ( ) & std:: ios_base :: adjustfield ) == std:: ios_base :: left , los caracteres de relleno se colocan después del carácter de salida; de lo contrario, antes.
-
Para la primera y tercera sobrecarga (donde
CharTcoincide con el tipo de ch ), se insertan exactamente traits :: length ( s ) caracteres. - Para la segunda sobrecarga, se insertan exactamente std:: char_traits < char > :: length ( s ) caracteres.
- Para las últimas dos sobrecargas, se insertan exactamente traits :: length ( reinterpret_cast < const char * > ( s ) ) caracteres.
- Si el número de caracteres a insertar es menor que os. width ( ) , entonces se añaden suficientes copias de os. fill ( ) a la secuencia de caracteres para hacer su longitud igual a os. width ( ) .
- Si ( out. flags ( ) & std:: ios_base :: adjustfield ) == std:: ios_base :: left , los caracteres de relleno se añaden al final de la secuencia de salida, de lo contrario se añaden antes de la secuencia de salida.
Ostream
es un tipo de clase derivado pública y unívocamente de
std::ios_base
.
Contenidos |
Parámetros
| os | - | flujo de salida para insertar datos |
| ch | - | referencia a un carácter para insertar |
| s | - | puntero a una cadena de caracteres para insertar |
Valor de retorno
Notas
Antes de LWG issue 1203 , código como ( std:: ostringstream ( ) << 1.2 ) . str ( ) no compilaba.
Ejemplo
#include <fstream> #include <iostream> void foo() { // error: operator<< (basic_ostream<char, _Traits>&, char8_t) is deleted // std::cout << u8'z' << '\n'; } std::ostream& operator<<(std::ostream& os, char8_t const& ch) { return os << static_cast<char>(ch); } int main() { std::cout << "Hello, world" // usa la sobrecarga `const char*` << '\n'; // usa la sobrecarga `char` std::ofstream{"test.txt"} << 1.2; // usa la sobrecarga para valores r std::cout << u8'!' << '\n'; // usa el operator<< definido en el programa (os, char8_t const&) }
Salida:
Hello, world !
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 167 | C++98 |
el número de caracteres insertados para todas
las sobrecargas en (2) era traits :: length ( s ) |
actualizados los números para las sobrecargas
donde
CharT
no coincide con el tipo de
ch
|
| LWG 1203 | C++11 |
sobrecarga para rvalue stream devolvía
referencia lvalue a la clase base |
devuelve referencia rvalue
a la clase derivada |
| LWG 2011 | C++98 | el relleno estaba determinado por std::num_put::do_put() | determinado por el propio operador |
| LWG 2534 | C++11 | la sobrecarga para rvalue stream no estaba restringida | restringida |
Véase también
|
inserta datos formateados
(función miembro pública) |
|
|
(C++23)
|
genera representación
formateada
de los argumentos
(plantilla de función) |
|
amplía caracteres
(función miembro pública de
std::basic_ios<CharT,Traits>
)
|