They are three streams used for different purposes.
Back in Unix and good old C, there are three "fake" files: Standard Input (keyboard), Standard Output (screen) and Standard Error (also screen).
The main difference between output and error is that the first is buffered (this may produce text artifacts that can be avoided by flushing). The reason why they exist separately is to give programmers and users a way to differentiate error messages from regular messages.
Standard Input in C++ is std::cin (console input).
Standard Output is std::cout (console output).
Standard Error is std::cerr (console error). std::clog is basically a rarely used clone of std::cerr, intended to be used for logging.