Sinn von cout.put
-
Vielleicht mag jemand den shift-operator nicht?
-
JIIIm schrieb:
Was ist eigentlich der Sinn und Zweck von
cout.put('a');? Man kann es benutzen, wenn man nur ein Zeichen ausgeben will. Toll! Das geht auch so:
cout << 'a';Also, wozu ist diese put-Funktion gut?
Ich finde sie logisch. cout kann nur put. Nur put kennt die privaten Details der Klasse.
Die vielen Operatoren benutzen put und kennen keine privaten Details.
-
OK, dann eben anders: Wozu ist put eine öffentliche Funktion, statt einfach private zu sein? Wozu ist sie für einen Anwender der ostream-Klasse gut? Das wäre so, als würde es in C# neben Console.Write, der ja alle möglichen Datentypen inklusive char übernehmen kann, noch ein Console.WriteChar geben.
-
JIIIm schrieb:
OK, dann eben anders: Wozu ist put eine öffentliche Funktion, statt einfach private zu sein?
Man muß sie nicht private machen, weil sie keine Gefahr darstellt.
Ich nehme an, vor 20 Jahren war es für die performance interessant, daß alle Operatoren put benutzen, statt den op<< von char, das würde ja einen zusätzlichen Funktionsaufruf gekostet haben.
-
Der Unterschied besteht darin, das es sich bei ostream.put('x') um eine unformatierte Ausgabe und bei ostream << 'a' um eine formatierte Ausgabe handelt.
Beispiel:
cout << setw(8) << 'x' << endl; (cout << setw(8)).put('x') << endl;Ausgabe:
x x
-
volkard schrieb:
Ich finde sie logisch. cout kann nur put. Nur put kennt die privaten Details der Klasse.
Die vielen Operatoren benutzen put und kennen keine privaten Details.
JIIIm schrieb:
OK, dann eben anders: Wozu ist put eine öffentliche Funktion, statt einfach private zu sein?
Habs jetzt nicht überprüft, aber sind Schiebeoperatoren nicht typischerweise global überladen? Dann sollte doch klar sein wieso put öffentlich sein muss.

-
1.) Habe ich schon mal erwaehnt, dass C++ nicht minimalistisch ist. D.h. die gleiche Funktionalitaet kann ueber verschiedene Arten angeboten werden. Wo ist das Problem?
2.) Wird bei << eine Methode der Klasse cout aufgerufen oder eine ueberladene Funktion? Schaue doch einfach mal nach.
-
Werner_logoff schrieb:
Der Unterschied besteht darin, das es sich bei ostream.put('x') um eine unformatierte Ausgabe und bei ostream << 'a' um eine formatierte Ausgabe handelt.
Dann lässt man die Formatierung bei cout << eben weg. Ich kapier immer noch nicht: Wozu ist cout.put gut? (Ich will nicht wissen, was cout.put alles nicht kann.)
knivil schrieb:
1.) Habe ich schon mal erwaehnt, dass C++ nicht minimalistisch ist. D.h. die gleiche Funktionalitaet kann ueber verschiedene Arten angeboten werden. Wo ist das Problem?
Es ist kein Problem. Ich möchte nur wissen: Wo verwendet man cout.put, wo cout << schlechter wäre? size und length, das ist so etwas Redundantes, wo es Geschmackssache ist. Aber cout << benutzt man sowieso ständig: Bei Strings, ints etc. Wieso sollte irgendjemand bei der Ausgabe eines einzelnen Zeichen plötzlich auf cout.put ausweichen.
knivil schrieb:
2.) Wird bei << eine Methode der Klasse cout aufgerufen oder eine ueberladene Funktion? Schaue doch einfach mal nach.
Es wird eine Funktion der Klasse ostream aufgerufen. cout ist eine Variable. Was hat das mit meiner Frage zu tun?
-
JIIIm schrieb:
Werner_logoff schrieb:
Der Unterschied besteht darin, das es sich bei ostream.put('x') um eine unformatierte Ausgabe und bei ostream << 'a' um eine formatierte Ausgabe handelt.
Dann lässt man die Formatierung bei cout << eben weg. Ich kapier immer noch nicht: Wozu ist cout.put gut? (Ich will nicht wissen, was cout.put alles nicht kann.)
Es geht nicht darum die Formatierung wegzulassen, << ist immer formatiert. Das ist ganz etwas anderes.
knivil schrieb:
1.) Habe ich schon mal erwaehnt, dass C++ nicht minimalistisch ist. D.h. die gleiche Funktionalitaet kann ueber verschiedene Arten angeboten werden. Wo ist das Problem?
Es ist kein Problem. Ich möchte nur wissen: Wo verwendet man cout.put, wo cout << schlechter wäre? size und length, das ist so etwas Redundantes, wo es Geschmackssache ist. Aber cout << benutzt man sowieso ständig: Bei Strings, ints etc. Wieso sollte irgendjemand bei der Ausgabe eines einzelnen Zeichen plötzlich auf cout.put ausweichen.
Zum Beispiel wenn man einzelne Zeichen unformatiert ausgeben möchte

-
JIIIm schrieb:
Werner_logoff schrieb:
Der Unterschied besteht darin, das es sich bei ostream.put('x') um eine unformatierte Ausgabe und bei ostream << 'a' um eine formatierte Ausgabe handelt.
Dann lässt man die Formatierung bei cout << eben weg. Ich kapier immer noch nicht: Wozu ist cout.put gut? (Ich will nicht wissen, was cout.put alles nicht kann.)
Wie meinen?
<<wird immer eine formatierte Ausgabe durchführen. Für formatierte Ausgaben wird eben<<verwendet.putdagegen schreibt direkt in den Puffer. Es wird gar nicht geprüft, ob oder was für Formatierungsangaben gemacht wurden. Das kann gerade auch interessant sein, wenn man binäre Daten schreiben möchte.Grüssli