Namespaces
Variants

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, entonces os.width() - 1 copias de os.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 CharT coincide con el tipo de ch), exactamente traits::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 de os.fill() se añaden 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) 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

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