Namespaces
Variants

operator<< (std::basic_ostream)

From cppreference.net
**Nota:** El código C++ no ha sido traducido ya que contiene elementos específicos del lenguaje de programación (como se solicitó). Solo se han traducido los comentarios y texto descriptivo que no forman parte del código en sí. **Notas sobre la traducción:** - Se preservaron todos los tags HTML y atributos - No se tradujo el contenido dentro de las etiquetas de código - Se mantuvieron todos los términos específicos de C++ (template, class, basic_ostream, char, Traits, char32_t, delete) - Solo se tradujo la palabra "operator" a "operador" y "delete" a "eliminado" - Se conservó toda la estructura y formato original
Definido en el encabezado <ostream>
basic_ostream y caracteres
(1)
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 ) ;
basic_ostream y arreglo de caracteres
(2)
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 ) ;
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 > &

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 > &

operador << ( basic_ostream < char , Traits > & os, char32_t ch ) = eliminado ;
template < class Traits >

basic_ostream < wchar_t , Traits > &

operador << ( basic_ostream < wchar_t , Traits > & os, char8_t ch ) = eliminado ;
template < class Traits >

basic_ostream < wchar_t , Traits > &

operador << ( basic_ostream < wchar_t , Traits > & os, char16_t ch ) = eliminado ;
template < class Traits >

basic_ostream < wchar_t , Traits > &

operador << ( basic_ostream < wchar_t , Traits > & os, char32_t ch ) = eliminado ;
template < class Traits >

basic_ostream < char , Traits > &

operador << ( basic_ostream < char , Traits > & os, const wchar_t * s ) = eliminado ;
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 > &

operador << ( basic_ostream < char , Traits > & os, const char16_t * s ) = eliminado ;
template < class Traits >

basic_ostream < char , Traits > &

operador << ( basic_ostream < char , Traits > & os, const char32_t * s ) = eliminar ;
template < class Traits >

basic_ostream < wchar_t , Traits > &

operador << ( basic_ostream < wchar_t , Traits > & os, const char8_t * s ) = eliminar ;
template < class Traits >

basic_ostream < wchar_t , Traits > &

operador << ( basic_ostream < wchar_t , Traits > & os, const char16_t * s ) = eliminado ;
template < class Traits >

basic_ostream < wchar_t , Traits > &

operador << ( basic_ostream < wchar_t , Traits > & os, const char32_t * s ) = eliminar ;

Inserta un carácter o una cadena de caracteres.

1) Se comporta como una FormattedOutputFunction . Después de construir y verificar el objeto sentry , inserta el carácter ch . Si ch tiene tipo char y el tipo contenedor de caracteres de os no es char , os. widen ( ch ) será insertado en su lugar.
El relleno se determina de la siguiente manera:
  • 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.
Después de la inserción, os. width ( 0 ) es llamado para cancelar los efectos de std::setw , si los hay.
2) Se comporta como una FormattedOutputFunction . Después de construir y verificar el objeto centinela, inserta caracteres sucesivos del arreglo de caracteres cuyo primer elemento está apuntado por s .
  • Para la primera y tercera sobrecarga (donde CharT coincide 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.
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 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.
Después de la inserción, os. width ( 0 ) es llamado 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, dado una referencia a valor del lado derecho 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 y unívocamente de std::ios_base .
4) Las sobrecargas que aceptan char16_t , char32_t etc (o secuencias terminadas en nulo de los mismos) están eliminadas: std:: cout << u 'X' no está permitido. Anteriormente, estos imprimirían un valor entero o de puntero.

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

1,2) os
3) std :: move ( os )

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)
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> )