std::basic_ostream<CharT,Traits>::operator<< - cppreference.com (original) (raw)

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) (since C++11)
basic_ostream& operator<<( unsigned long long value ); (5) (since 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) (since C++23)
basic_ostream& operator<<( std::nullptr_t ); (10) (since 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 value ); (14)
basic_ostream& operator<<( float value ); (15)
basic_ostream& operator<<( /* extended-floating-point-type */ value ); (16) (since 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)

Inserts data into the stream.

1-8) Inserts value.

This function behaves as a FormattedOutputFunction. After constructing and checking the sentry object, inserts a value by calling

std::num_put::put()

. If the end of file condition was encountered during output (put().failed() == true), sets badbit.

  1. Equivalent to return operator<<(const_cast<const void*>(p));.

  2. Equivalent to return *this << s;, where s is an implementation-defined null-terminated character type string.

  3. Inserts a value from short value.

  4. Inserts a value from int value.

13,14) Inserts a value from unsigned short or unsigned int value.

This function behaves as a FormattedOutputFunction. After constructing and checking the sentry object, inserts static_cast<unsigned long>(value) as in (3).

  1. Inserts a value from float value.

This function behaves as a FormattedOutputFunction. After constructing and checking the sentry object, inserts static_cast<double>(value) as in (6).

  1. Inserts a value from value. The library provides overloads for all cv-unqualified extended floating-point types as the type of the parameter value.

This function behaves as a FormattedOutputFunction. After constructing and checking the sentry object, checks the floating-point conversion rank of /* extended-floating-point-type */:

  1. This function behaves as an UnformattedOutputFunction. After constructing and checking the sentry object, checks if sb is a null pointer. If it is, executes setstate(badbit) and exits. Otherwise, extracts characters from the input sequence controlled by sb and inserts them into *this until one of the following conditions are met:

If no characters were inserted, executes setstate(failbit). If an exception was thrown while extracting, sets failbit and, if failbit is set in exceptions(), rethrows the exception.

18-20) Calls func(*this). These overloads are used to implement output I/O manipulators such as std::endl.

[edit] Parameters

value - integer, floating-point, boolean, or pointer value to insert
func - function to call
sb - pointer to the stream buffer to read the data from

[edit] Return value

1-19) *this

  1. func(*this)

[edit] Notes

There are no overloads for pointers to non-static members, pointers to volatiles,(until C++23) or function pointers (other than the ones with signatures accepted by the (18-20) overloads).

Character and character string arguments (e.g., of type char or const char*) are handled by the non-member overloads of operator<<.

Overload (10) was added by the resolution of LWG issue 2221, but it is never implemented in any standard library implementation under C++11/14 modes.

[edit] Example

#include #include #include   int fun() { return 42; }   int main() { std::istringstream input(" "Some text." "); double f = 3.14; bool b = true;   std::cout << fun() // int overload (12) << ' ' // non-member overload << std::boolalpha // function overload (18) << b // bool overload (1) << " " // non-member overload << std::fixed // function overload (18) again << f // double overload (6) << input.rdbuf() // streambuf overload << fun // bool overload (1): there's no overload for int()() << std::endl; // function overload (18) again   int x = 0; int p1 = &x; volatile int* p2 = &x; std::cout << "p1: " << p1 << '\n' // const void* overload, prints address << "p2: " << p2 << '\n'; // before C++23 (P1147): bool overload :), because // operator<<(const void*) is not a match, as it discards the volatile // qualifier. To fix this, C++23 adds const volatile void* overload (9), // that prints the address as expected. }

Possible output:

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

[edit] Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior
LWG 117 C++98 overloads (1-8,11-15) delegated the insertion tonum_put::put, but it does not have overloads for short,unsigned short, int, unsigned int, and float they are convertedbefore being passedto num_put::put
LWG 567 C++98 overload (17) behaved as a FormattedOutputFunctionbecause of the resolution of LWG issue 60 it behaves as anUnformattedOutputFunction

[edit] See also

operator<<(std::basic_ostream) inserts character data or insert into rvalue stream (function template) [edit]
operator<> performs stream input and output on strings (function template) [edit]
operator<<(C++17) performs stream output on string views (function template) [edit]
operator<> performs stream input and output of bitsets (function template) [edit]
operator<> serializes and deserializes a complex number (function template) [edit]
operator<>(C++11) performs stream input and output on pseudo-random number engine (function template) [edit]
operator<>(C++11) performs stream input and output on pseudo-random number distribution (function template) [edit]
put inserts a character (public member function) [edit]
write inserts blocks of characters (public member function) [edit]
to_chars(C++17) converts an integer or floating-point value to a character sequence (function) [edit]