Wie Objekt cout druckt mehrere Argumente?
Im Gegensatz zu printf()
Funktion, die es nicht haben Formatbezeichner, von wo compiler Vermutungen die keine. die Argumente aus. Was dann passiert ist, bei cout?
- Es wird als Verkettung bezeichnet. also
cout << a << b
ist (cout <<a) << b
. Wo die überlast-operator gibt den stream zu übergeben. - Wie ist das im Zusammenhang zu C eigentlich?
- weil ich auch wissen wollte, abt etwas von printf im gleichen Szenario, so dass ist, wie es ist mit c eigentlich.
- Für printf, sollten Sie eine weitere Frage stellen, dann. Oder - besser - Lesen Sie zuerst über das variable argument-Listen. Zu finden in der standard und jedes Buch über C. In jedem Fall die Frage, wie nun festgestellt, nicht decken diese, wie Sie sehen können aus die Antworten gegeben.
- gerne, ich bearbeitete es.
Du musst angemeldet sein, um einen Kommentar abzugeben.
IOStreams nur eine argument in einer Zeit, so funktioniert es Prima. 🙂
Die Magie der operator overloading bedeutet, dass diese:
ist eigentlich diese:
oder so:
(Je nach Art der
a
,b
undc
entweder eine Kostenlose Funktion oder eine Mitglied-Funktion aufgerufen wird.)und jeder einzelne Anruf wird zu einer überlastung akzeptiert, dass der Typ, den Sie ihm geben. Kein argument-zählen oder das format-strings erforderlich sind, wie Sie sind, mit Ihren single Aufrufe
printf
.a
,b
undc
sind in der falschen Reihenfolge<<
und>>
operator überladen für verschiedene Datentypen. Keine Notwendigkeit der Formatbezeichner in diesem Fall. Für<<
Betreiber mit folgenden Definitionen sind inostream
Klasse:C++ - streams haben keine Implementierung für die Eingabe/Ausgabe von mehreren Werten. Sie haben die formatierte Eingabe/Ausgabe-Operatoren >>/<<, die getrennt für jede Ausgabe Wert. Neben diesen, haben Sie unformatiert Funktionen des Betriebs auf einen einzelnen Wert (array)
Beispiel: Eine einzelne
ostream& operator << (T a);
legt den Wert 'a' in den stream und liefert eine Referenz auf den stream selbst. Dieser Hinweis auf den stream ist berechtigt, anzunehmen, der nächste Wert, 'b', wie instream << a << b;
Hinweis: Dies stellt für die definierten Operatoren
IStream& operator >> (IStream&, Type)
undOStream& operator << (OStream&, Type)
nur. Eine definierte operator kann einem Betreiber zur Verfügung gestellt von der standard-Bibliothek oder einer Anwender-definierten operator.Der compiler braucht nicht zu erraten, die Anzahl der Argumente von
printf
's Formatbezeichner (obwohl einige tun für bessere Warnungen). Im Falle voncout
jeder<<
ist ein Befehl, um entweder die Ausgabe etwas oder manipulieren den Datenstrom, so gibt es keine Notwendigkeit für einen Formatbezeichner.printf
ist eine Variable Funktion. Ein compiler kann (nicht im Allgemeinen) nicht überprüfen, die Einhaltung der Anzahl der effektiven übergebenen Argumente mit der format-string. Moderne (wie gcc oder lint-tool) zu tun wie mit einer einfachen string-Analyse, aber Sie können nur tun es in dem Fall von format-string-Literale.printf
mehr. 🙂