#include <iostream> // header
std::cout << "Hello world!" << std::endl;
Works so because std::cout
is an std::ostream
type object managing console output.
And, thankfully, somewhere in the C++
standard, we have something defined like this:
std::ostream& operator<< (std::ostream&, const char * );
The first argument and the return type of the function is std::ostream
.
This makes it possible to have something like:
std::cout << "Hello world!" << " How you doing?" << " Bye" << std::endl;
This is no biggie and seems pretty basic. But, what made me fell in love with C++ all over again is this:
What if we have a function like:
void Print (std::ostream& os);
either as a member function or a standalone function.
Then, of course,
Print (std::cout);
Print (std::cerr);
Print (std::cout << "Haha -- ");
Print (std::cout << "Answer to everything=" << 42);
All are valid, working calls. Which for some probably insignificant reason, I find extremely amazing.