Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does std::cout have a return value?

Tags:

c++

return

cout

I am curious if std::cout has a return value, because when I do this:

cout << cout << "";

some hexa code is printed. What's the meaning of this printed value?

like image 606
user1448323 Avatar asked Jun 11 '12 20:06

user1448323


1 Answers

Because the operands of cout << cout are user-defined types, the expression is effectively a function call. The compiler must find the best operator<< that matches the operands, which in this case are both of type std::ostream.

There are many candidate operator overloads from which to choose, but I'll just describe the one that ends up getting selected, following the usual overload resolution process.

std::ostream has a conversion operator that allows conversion to void*. This is used to enable testing the state of the stream as a boolean condition (i.e., it allows if (cout) to work).

The right-hand operand expression cout is implicitly converted to void const* using this conversion operator, then the operator<< overload that takes an ostream& and a void const* is called to write this pointer value.

Note that the actual value resulting from the ostream to void* conversion is unspecified. The specification only mandates that if the stream is in a bad state, a null pointer is returned, otherwise a non-null pointer is returned.


The operator<< overloads for stream insertion do have a return value: they return the stream that was provided as an operand. This is what allows chaining of insertion operations (and for input streams, extraction operations using >>).

like image 56
James McNellis Avatar answered Oct 26 '22 13:10

James McNellis