Other than the theoretical difference between cout and cerr where the former puts values to the monitor and the latter puts values related to errors to the monitor, is there any real difference here? Why not use cout when you want to send anything to monitor? Why use cerr at all?
You can redirect any of the iostreams that you want to, std::cerr is only set to the monitor by default. So if you want to view errors while you're debugging but you want the errors to go to some file for the release mode you only need to change it in one place and it won't interfere with std::cout. That's how I use it at least
Here's a (quick and dirty) translation from the german cplusplus forum:
"std::cout is a buffered stream which means that not every character appears on the console immediately but is buffered for a better performance.
std::cerr is not buffered, hence it's suitable for error messages, e.g. when a program gets stuck and tries to give all the output it can until it freezes."
I've read somewhere about compilers or IDEs that print cout and cerr onto the console in debug mode but omit the cerr stream in release mode, or something like that. I don't remember the details.