Die Funktion std::cerr aus der Standardbibliothek ist dafür gedacht Fehler in einem Konsolenprogramm auszugeben. Hierbei gibt es entscheidende Unterschiede zu std::cout. Die Ausgaben eines Konsolenprogramms können mit dem Parameter > (Beispiel: programm.exe > ausgabe.txt) in eine Datei umgeleitet werden. Wenn das Programm so ausgeführt wird, werden die Strings, die mit std::cout ausgegeben werden nur in die Datei geschrieben, aber nicht mehr in der Konsole angezeigt. Ausgaben, die mit std:cerr erzeugt werden, werden dagegen noch in der Konsole angezeigt und in die Datei geschrieben. So erfolgt eine saubere Trennung von Ergebnisausgaben und Fehlerausgaben. So eine Trennung kann auch helfen, um ein Programm evtl. auch in automatisierten Skripten verwenden zu können. Ein weiterer Unterschied ist, dass std::cerr nicht gepuffert wird. 

#include <iostream> 
#include <cstdlib>

int main() 
{   
       std::cout << "Mein erstes Programm\n"        
                      << "Eine zweite Zeile\n\n";
 
       std::cerr << "Programm fertig!\n";     

      return EXIT_SUCCESS;
}

Das Beispiel würde bspw. nur “Programm fertig!” in der Konsole anzeigen, wenn man die Ausgabe in eine Datei umleiten würde.

Zusammenfassend bedeutet dies also:

std::cout ist für die Ausgabe des eigentlichen Ergebnisses oder einfachen Ausgaben gedacht.
std::cerr ist für Fehlerausgeben gedacht.

Nähere Informationen zu diesem Thema findet ihr hier: https://en.cppreference.com/w/cpp/io/cin