operator<<(std::basic_ostream)
De es.cppreference.net
| Definido en el encabezado <ostream>
|
||
basic_ostream y carácter |
||
template< class CharT, class Traits >
basic_ostream<CharT, Traits>&
operator<<( basic_ostream<CharT, Traits>& os, CharT ch );
template< class CharT, class Traits >
basic_ostream<CharT, Traits>&
operator<<( basic_ostream<CharT, Traits>& os, char ch );
template< class Traits >
basic_ostream<char, Traits>&
operator<<( basic_ostream<char, Traits>& os, char ch );
template< class Traits >
basic_ostream<char, Traits>&
operator<<( basic_ostream<char, Traits>& os, signed char ch );
template< class Traits >
basic_ostream<char, Traits>&
operator<<( basic_ostream<char, Traits>& os, unsigned char ch );
|
(1) | |
basic_ostream y arreglo de caracteres |
||
template< class CharT, class Traits >
basic_ostream<CharT, Traits>&
operator<<( basic_ostream<CharT, Traits>& os, const CharT* s );
template< class CharT, class Traits >
basic_ostream<CharT, Traits>&
operator<<( basic_ostream<CharT, Traits>& os, const char* s );
template< class Traits >
basic_ostream<char, Traits>&
operator<<( basic_ostream<char, Traits>& os, const char* s );
template< class Traits >
basic_ostream<char, Traits>&
operator<<( basic_ostream<char, Traits>& os, const signed char* s );
template< class Traits >
basic_ostream<char, Traits>&
operator<<( basic_ostream<char, Traits>& os, const unsigned char* s );
|
(2) | |
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/arreglo UTF |
||
template< class Traits >
basic_ostream<char, Traits>&
operator<<( basic_ostream<char, Traits>& os, wchar_t ch ) = delete;
template< class Traits >
basic_ostream<char, Traits>&
operator<<( basic_ostream<char, Traits>& os, char8_t ch ) = delete;
template< class Traits >
basic_ostream<char, Traits>&
operator<<( basic_ostream<char, Traits>& os, char16_t ch ) = delete;
template< class Traits >
basic_ostream<char, Traits>&
operator<<( basic_ostream<char, Traits>& os, char32_t ch ) = delete;
template< class Traits >
basic_ostream<wchar_t, Traits>&
operator<<( basic_ostream<wchar_t, Traits>& os, char8_t ch ) = delete;
template< class Traits >
basic_ostream<wchar_t, Traits>&
operator<<( basic_ostream<wchar_t, Traits>& os, char16_t ch ) = delete;
template< class Traits >
basic_ostream<wchar_t, Traits>&
operator<<( basic_ostream<wchar_t, Traits>& os, char32_t ch ) = delete;
template< class Traits >
basic_ostream<char, Traits>&
operator<<( basic_ostream<char, Traits>& os, const wchar_t* s ) = delete;
template< class Traits >
basic_ostream<char, Traits>&
operator<<( basic_ostream<char, Traits>& os, const char8_t* s ) = delete;
template< class Traits >
basic_ostream<char, Traits>&
operator<<( basic_ostream<char, Traits>& os, const char16_t* s ) = delete;
template< class Traits >
basic_ostream<char, Traits>&
operator<<( basic_ostream<char, Traits>& os, const char32_t* s ) = delete;
template< class Traits >
basic_ostream<wchar_t, Traits>&
operator<<( basic_ostream<wchar_t, Traits>& os, const char8_t* s ) = delete;
template< class Traits >
basic_ostream<wchar_t, Traits>&
operator<<( basic_ostream<wchar_t, Traits>& os, const char16_t* s ) = delete;
template< class Traits >
basic_ostream<wchar_t, Traits>&
operator<<( basic_ostream<wchar_t, Traits>& os, const char32_t* s ) = delete;
|
(4) | (desde C++20) |
Inserta un carácter o una cadena de caracteres.
1) Se comporta como un FormattedOutputFunction. Después de construir y verificar el sentry objeto, inserta el carácter
ch. Si ch tiene el tipo char y el tipo de contenedor de caracteres de os no es char, os.widen(ch) se insertará en su lugar. El relleno se determina de la siguiente manera:
- Si
os.width() > 1, entoncesos.width() - 1copias deos.fill()se añaden 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.
Después de la inserción,
os.width(0) se llama para cancelar los efectos de std::setw, si los hay.2) Se comporta como un FormattedOutputFunction. Después de construir y verificar el objeto sentry, inserta caracteres sucesivos del arreglo de caracteres cuyo primer elemento es apuntado por
s.
- Para la primera y tercera sobrecarga (donde
CharTcoincide con el tipo dech), exactamentetraits::length(s)caracteres se insertan. - Para la segunda sobrecarga, exactamente
std::char_traits<char>::length(s)caracteres se insertan. - Para las últimas dos sobrecargas, exactamente
traits::length(reinterpret_cast<const char*>(s))se insertan.
Antes de la inserción, primero, todos los caracteres se ensanchan usando
os.widen(), luego el relleno se determina de la siguiente manera:
- Si el número de caracteres a insertar es menor que
os.width(), entonces suficientes copias deos.fill()se añaden a la secuencia de caracteres para hacer su longitud igual aos.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.
Después de la inserción,
os.width(0) se llama para cancelar los efectos de std::setw, si los hay. Si
s es un puntero nulo, el comportamiento es indefinido.3) Llama al operador de inserción apropiado, dada una referencia rvalue a un objeto de flujo de salida (equivalente a
os << value). Esta sobrecarga participa en la resolución de sobrecarga solo si la expresión os << value está bien formada y Ostream es un tipo de clase derivado pública e inequívocamente de std::ios_base.4) Sobrecargas que aceptan
char16_t, char32_t etc (o su secuencia terminada en nulo) se eliminan: std::cout << u'X' no está permitido. Anteriormente, estos imprimirían un valor entero o puntero.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
1,2)
os
3)
std
::
move
(
os
)
Notas
Antes de LWG issue 1203 , código como ( std:: ostringstream ( ) << 1.2 ) . str ( ) no compilaba.
Ejemplo
Ejecutar este código
#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>
)
|