The standard defines the following operator<<
overload in the basic_ostream
class template:
basic_ostream<charT,traits>& operator<<(
basic_ostream<charT,traits>& (*pf) (basic_ostream<charT,traits>&) );
Effects: None. Does not behave as a formatted output function (as described in 27.6.2.5.1).
Returns:
pf(*this)
.
The parameter is a pointer to a function taking and returning a reference to a std::ostream
.
This means that you can “stream” a function with this signature to an ostream
object and it has the effect of calling that function on the stream. If you use the name of a function in an expression then it is (usually) converted to a pointer to that function.
std::hex
is an std::ios_base
manipulator defined as follows.
ios_base& hex(ios_base& str);
Effects: Calls
str.setf(ios_base::hex, ios_base::basefield)
.Returns: str.
This means that streaming hex
to an ostream
will set the output base formatting flags to output numbers in hexadecimal. The manipulator doesn’t output anything itself.