Was genau ist std cout in c++?
Ich kenn zb bei javascript und php
das console.log klassisch konsolen ausgabe. „Log“ eine methode vom objekt „console“ auf die greift man mit dem . Zu. Wie bei php das -> bei objekten.
Bei PHP ist „echo "Hello World";“ aber keine funktion irgendwie sondern ein sprackonstrukt meint google.
man hat keine () aufrufsklammern mit parametern
bei den anderen bekannten sprachen kenn ich es aber auch als funktion wie python java c# c.
print() system.out.println() system.console.writeline() printf()
Nur bei c++ ist es ganz anders wie bei php was ich nicht ganz verstanden habe.
und man muss selbst das simpelste von der standart bibliothek iostream importieren/includen.
bei python kenn ich das man time importieren muss wenn man ein sleep/settimetout machen will.
das ist immerhin nicht so wichtig wie eine konsolenausgabe.
Das könnte mir alles egal sein ist nur eine konsolen ausgabe aber ich will was lernen und die sprache verstehen.
Chat gpt hat mir eine nicht verständliche erklärung ausgepuckt
3 Antworten
cout/stdout ist der Standardausgabekanal,. cin/stdin ist der Standardeingabekanal, cerr/stderr ist der Standardfehlerkanal. Zusamnmen sind das die 3 Standarddatenströme.
stdout ist ein Standard-Datenstrom, über den Daten ausgegeben werden können.
In früheren Computerzeiten war das einfach die Textausgabe auf dem Monitor - da gab's ja noch keine Fenster. Allenfalls hat man die Ausgabe in eine "echte" Datei umgeleitet, wobei unter Unix "Everything is a file" auch Geräte so wie eine Datei angesprochen werden.
Wie das Verhalten der jeweiligen Programmiersprache beigebracht wird, ist unterschiedlich implementiert. Hier ist beschrieben, wie es in C, C++, Java und Python abgebildet ist.
https://de.wikipedia.org/wiki/Standard-Datenstr%C3%B6me#Programmiersprachen_C_und_C++
Was ist jetzt eigentlich deine Frage?
Du musst iostream inkludieren, ja. Gerade in C++ wird nicht jedes Programm zwangsläufig mit solchen Streams arbeiten.
std::cout ist ein Objekt vom Typ ostream, das den Standard-Ausgabestream des Prozesses darstellt. Mit den auf diesem Typ überladenen Operatoren wie << kann man Daten rausschreiben lassen.
cout ist ein Objekt, Objekte haben Methoden. Das ist auch durchaus logisch so: statt einer Funktion den gewünschten Stream zu übergeben, wird hier auf dem Stream eine Methode aufgerufen.
So ist das in der OOP eben. In Java und den meisten anderen OOP-Sprachen funktioniert das genauso, in C++ gibt's halt überladene Operatoren, die nicht auf den ersten Blick wie Methodenaufrufe aussehen. Letztlich werden dabei aber natürlich auch Methoden aufgerufen.
std::cout << "Hello";
iist letzlich ein
std::cout.operator<<("Hello");
unbesehens der Frage, ob man den Aufruf so machen könnte. Funktional ist die Nutzung eines Operators im Kern ein Methodenaufruf.
Die Operatoren von Klassen sind in C++ überladbar, << und >> boten sich an, da sie auch als Shiftoperator dienen (Schieben). Man hat sich entschlossen beim ostream das Linksschieben so zu deuten, daß der Teil rechts davon nach links in den ostream geschoben wird.
std::cout ist ein std::ostream, entsprrechend gibt es da noch einiges mehr an Methoden.
Über C++ Streams und deren Intrinsic könnte man vermutlich fast ein eigenes Buch schreiben.
An der Notwendigkeit, einer Ausgabe mitzugeben, wohin sie ausgegeben werden soll, dürfte kein Zweifel bestehen.
Man kann das jetzt so ausgestalten, dass der Ausgebende aktiv ist und das Ausgabegerät passiv einfach entgegenzunehmen hat, was kommt.
Oder dass das Ausgabegerät aktiv entgegennimmt und damit die Regeln festlegt, was ihm in welcher Form übergeben werden soll.
Der Unterschied ist wie Briefkasten und Postschalter: In den Briefkasten kann man jederzeit alles mögliche einwerfen und das Beste hoffen.
Für den Schalter gelten strengere Regeln: Er ist nicht immer geöffnet, er nimmt nicht alles entgegen, prüft dafür und kommuniziert zurück.
versteht man doch, warum cout keine funktion ist wie print() log() println usw.
mit parametern sondern was eigenes ist mit <<
Der rest war nur eine feststellung und nebenbei hab ich gefragt wieso das nicht gleich dabei ist und man iostream includen muss.
jemand meinte da es früher anders war und man keine fenster hatte, alles war eine konsole hab ich nur verstanden.