Namespaces
Variants

std::basic_ostream<CharT,Traits>:: operator<<

From cppreference.net
basic_ostream & operator << ( bool value ) ;
(1)
basic_ostream & operator << ( long value ) ;
(2)
basic_ostream & operator << ( unsigned long value ) ;
(3)
basic_ostream & operator << ( long long value ) ;
(4) (desde C++11)
basic_ostream & operator << ( unsigned long long value ) ;
(5) (desde C++11)
basic_ostream & operator << ( double value ) ;
(6)
basic_ostream & operator << ( long double value ) ;
(7)
basic_ostream & operator << ( const void * value ) ;
(8)
basic_ostream & operator << ( const volatile void * value ) ;
(9) (desde C++23)
basic_ostream & operator << ( std:: nullptr_t ) ;
(10) (desde C++17)
basic_ostream & operator << ( short value ) ;
(11)
basic_ostream & operator << ( int value ) ;
(12)
basic_ostream & operator << ( unsigned short value ) ;
(13)
basic_ostream & operator << ( unsigned int valor ) ;
(14)
basic_ostream & operator << ( float value ) ;
(15)
basic_ostream & operator << ( /* extended-floating-point-type */ value ) ;
(16) (desde C++23)
basic_ostream & operator << ( std:: basic_streambuf < CharT, Traits > * sb ) ;
(17)
basic_ostream & operator << (
std:: ios_base & ( * func ) ( std:: ios_base & ) ) ;
(18)
basic_ostream & operator << (
std:: basic_ios < CharT, Traits > & ( * func ) ( std:: basic_ios < CharT, Traits > & ) ) ;
(19)
basic_ostream & operator << (

std:: basic_ostream < CharT, Traits > & ( * func )

( std:: basic_ostream < CharT, Traits > & ) ) ;
(20)

Inserta datos en el flujo.

1-8) Inserta value .
Esta función se comporta como una FormattedOutputFunction . Después de construir y verificar el objeto sentry, inserta un valor llamando a std::num_put::put() . Si se encontró una condición de fin de archivo durante la salida ( put ( ) . failed ( ) == true ), establece badbit .
9) Equivalente a return operator << ( const_cast < const void * > ( p ) ) ; .
10) Equivalente a return * this << s ; , donde s es una cadena de caracteres terminada en nulo definida por la implementación.
11) Inserta un valor desde short value .
Esta función se comporta como una FormattedOutputFunction . Después de construir y verificar el objeto sentry, inserta un valor long lval como en (2) , donde lval es
12) Inserta un valor de int value .
Esta función se comporta como una FormattedOutputFunction . Después de construir y verificar el objeto sentry, inserta un valor long lval como en (2) , donde lval es
13,14) Inserta un valor desde unsigned short o unsigned int value .
Esta función se comporta como una FormattedOutputFunction . Después de construir y verificar el objeto centinela, inserta static_cast < unsigned long > ( value ) como en (3) .
15) Inserta un valor de tipo float value .
Esta función se comporta como una FormattedOutputFunction . Después de construir y verificar el objeto sentry, inserta static_cast < double > ( value ) como en (6) .
16) Inserta un valor desde value . La biblioteca proporciona sobrecargas para todos los extended floating-point types sin calificadores cv como el tipo del parámetro value.
Esta función se comporta como una FormattedOutputFunction . Después de construir y verificar el objeto centinela, verifica el rango de conversión de punto flotante de /* extended-floating-point-type */ :
  • Si el rango es menor o igual que el de double , inserta static_cast < double > ( value ) como en (6) .
  • De lo contrario, si el rango es menor o igual que el de long double , inserta static_cast < long double > ( value ) como en (7) .
  • De lo contrario, una invocación de esta sobrecarga está condicionalmente soportada con semántica definida por la implementación.
17) Esta función se comporta como una UnformattedOutputFunction . Después de construir y verificar el objeto centinela, comprueba si sb es un puntero nulo. Si lo es, ejecuta setstate ( badbit ) y sale. De lo contrario, extrae caracteres de la secuencia de entrada controlada por sb y los inserta en * this hasta que se cumpla una de las siguientes condiciones:
  • ocurre fin-de-archivo en la secuencia de entrada;
  • la inserción en la secuencia de salida falla (en cuyo caso el carácter a insertar no se extrae);
  • ocurre una excepción (en cuyo caso la excepción se captura).
Si no se insertó ningún carácter, ejecuta setstate ( failbit ) . Si se lanzó una excepción durante la extracción, establece failbit y, si failbit está establecido en exceptions() , relanza la excepción.
18-20) Llama a func ( * this ) . Estas sobrecargas se utilizan para implementar manipuladores de E/S de salida como std::endl .

Contenidos

Parámetros

value - valor entero, de punto flotante, booleano o puntero a insertar
func - función a llamar
sb - puntero al búfer de flujo desde el cual leer los datos

Valor de retorno

1-19) * this
20) func ( * this )

Notas

No hay sobrecargas para punteros a miembros no estáticos , punteros a volátiles, (hasta C++23) o punteros a funciones (excepto aquellos con firmas aceptadas por las ( 18-20 ) sobrecargas).

  • Intentar imprimir tales objetos invoca una conversión implícita a bool , y, para cualquier valor de puntero no nulo, se imprime el valor 1 (a menos que se haya establecido boolalpha , en cuyo caso se imprime true ).

Los argumentos de carácter y cadena de caracteres (por ejemplo, de tipo char o const char * ) son manejados por las sobrecargas no miembro de operator << .

  • Intentar imprimir un carácter usando la sintaxis de llamada a función miembro (por ejemplo, std:: cout . operator << ( 'c' ) ; ) llamará a una de las sobrecargas en ( 2-5 ) o ( 11-14 ) e imprimirá el valor numérico.
  • Intentar imprimir una cadena de caracteres usando la sintaxis de llamada a función miembro llamará a la sobrecarga (8) e imprimirá el valor del puntero en su lugar.

Overload (10) fue añadido por la resolución de LWG issue 2221 , pero nunca se implementa en ninguna implementación de biblioteca estándar bajo modos C++11/14.

Ejemplo

#include <iomanip>
#include <iostream>
#include <sstream>
int fun() { return 42; }
int main()
{
    std::istringstream input(" \"Some text.\" ");
    double f = 3.14;
    bool b = true;
    std::cout
        << fun()          // sobrecarga para int (12)
        << ' '            // sobrecarga no miembro
        << std::boolalpha // sobrecarga para función (18)
        << b              // sobrecarga para bool (1)
        << " "            // sobrecarga no miembro
        << std::fixed     // sobrecarga para función (18) nuevamente
        << f              // sobrecarga para double (6)
        << input.rdbuf()  // sobrecarga para streambuf
        << fun            // sobrecarga para bool (1): no hay sobrecarga para int(*)()
        << std::endl;     // sobrecarga para función (18) nuevamente
    int x = 0;
    int* p1 = &x;
    volatile int* p2 = &x;
    std::cout
        << "p1: " << p1 << '\n'  // sobrecarga `const void*`, imprime dirección
        << "p2: " << p2 << '\n'; // antes de C++23 (P1147): sobrecarga bool :), porque
            // operator<<(const void*) no coincide, ya que descarta el calificador `volatile`
            // Para corregir esto, C++23 añade sobrecarga `const volatile void*` (9),
            // que imprime la dirección como se espera.
}

Salida posible:

42 true 3.140000 "Some text." true
p1: 0x7ffcea766600
p2: 0x7ffcea766600

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 117 C++98 las sobrecargas (1-8,11-15) delegaban la inserción a
num_put::put , pero no tiene sobrecargas para short ,
unsigned short , int , unsigned int , y float
se convierten
antes de ser pasados
a num_put::put
LWG 567 C++98 la sobrecarga (17) se comportaba como una FormattedOutputFunction
debido a la resolución de LWG issue 60
se comporta como una
UnformattedOutputFunction

Véase también

inserta datos de caracteres o inserta en flujo de valor-r
(plantilla de función)
realiza entrada y salida de flujo en cadenas
(plantilla de función)
(C++17)
realiza salida de flujo en vistas de cadena
(plantilla de función)
realiza entrada y salida de flujo de conjuntos de bits
(plantilla de función)
serializa y deserializa un número complejo
(plantilla de función)
realiza entrada y salida de flujo en motor de números pseudoaleatorios
(plantilla de función)
realiza entrada y salida de flujo en distribución de números pseudoaleatorios
(plantilla de función)
inserta un carácter
(función miembro pública)
inserta bloques de caracteres
(función miembro pública)
(C++17)
convierte un valor entero o de punto flotante a una secuencia de caracteres
(función)