std::cout writes to a different stream than std::cerr, and std::cerr doesn't have a buffer (which std::cout does). Generally a terminal will display both streams, though.
As a rule of thumb, I use std::cout for processed data and data that I might want to forward to another application for more processing, and std::cerr for errors, notices, and data that shouldn't really be included in the other stream (in my opinion). That's me, though. :)