2016-04-22 12 views
2

Ich beginne C++ von C zu lernen. Kürzlich habe ich gerade ein Tutorial Buch über C++ gelesen. In Abschnitt zu Strömen einführen hat das Buch bemerkt:Konvertiert printf() seine Argumente in einen String wie cout?

Der < < Operator ist überlastet, so dass der Operand auf dem rechten Seite einen String oder ein primitiver Wert sein kann. Wenn dieser Operand keine Zeichenfolge ist, konvertiert der Operator < < ihn in eine Zeichenfolge, bevor er an den Ausgangsstrom gesendet wird.

So frage ich mich, ob printf() Funktion in C hat den gleichen Effekt. Und wenn nicht, erzähle mir bitte von den Unterschieden zwischen beiden.

+2

möglich duplizieren http://stackoverflow.com/questions/2872543/printf-vs-cout-in-c –

+3

'printf' macht diese Art der Konvertierung mit [Formatspezifizierer] (http://www.tutorialspoint.com) /c_standard_library/c_function_printf.htm). z.B. Int-Test = 1; printf ("% d", Test); ' – LPs

+1

Lesen Sie über [' sprintf'] (http://www.cplusplus.com/reference/cstdio/sprintf/), das könnte für Sie interessant sein. –

Antwort

7

Nun, natürlich muss es irgendwie eine String-Repräsentation jedes Arguments generieren, das benötigt wird, um etwas zu drucken zu haben. Beim Drucken werden Zeichenströme an ein Ausgabegerät gesendet. Schließlich können Sie nur dann drucken, wenn Sie eine Zeichenfolge haben. Die Funktion printf() verwendet die Formatierungszeichenfolge, um zu steuern, wie jedes Argument interpretiert wird, um die Zeichendarstellung zu erstellen und diese Darstellung bei der Ausgabe zu formatieren.

Beachten Sie, dass keine "Konvertierung" der Argumente passiert, die natürlich extern sichtbar ist. Es gibt keine Möglichkeit

printf("%d\n", 47); 

dass 47 in einen String an Ort und Stelle machen; C verwendet call by value, so dass die Funktion nur eine Kopie des Werts erhält und dann die im %d Konvertierungsspezifizierer implizite Typinformation verwendet, um herauszufinden, wie die zwei Zeichen '4' und '7' generiert werden, aus denen die gedruckte Darstellung besteht.

2

Also frage ich mich, ob printf() - Funktion in C den gleichen Effekt hat.

Sowohl C als auch C++ verwendet Streams für die Ausgabe. In C ist es stdout und in C++ ist es cout.

Obwohl es nicht aus der Anweisung printf schreibt, schreibt man in Standardausgabe (stdout) ein Terminal.

Im Falle von cout, ist es offensichtlich von einer Aussage selbst, wo die Ausgabe geht.

einige feine Unterschiede

Mit cout Sie einen zusätzlichen Header enthalten könnte müssen - sagen iomanip - und einige Funktionen - sagen setw() - Feinformatierung haben, wo wie in printf Sie auf Format-String verlassen .

Leistung - Jeder hat seinen eigenen Vorteil, je nachdem, was Sie drucken und wo Sie drucken.Ich lieh mir diesen Punkt aus here.

Eine weitere Ähnlichkeit

Sowohl C++ und C-Normen nichts über die Reihenfolge der Auswertung von Funktionsargumente nennen. Sie dürfen also keine ausgefallenen Sachen mit Funktionen ausprobieren. Zum Beispiel weder sollten Sie tun

printf(%d%d",++i,i++); // The behaviour is undefined. 

noch sollten Sie

cout<<++i<<++i; // The behaviour is undefined. 

Hinweis tun:

Denken Sie daran, dass die c-Streams in C++ zur Verfügung stehen, wenn Sie die notwendigen Header enthalten.

+0

C++ kann 'stdout' und die' printf' Familie für die Ausgabe verwenden. Man sollte also sagen, dass C++ Streams für die Ausgabe verwendet, wie zum Beispiel 'cout' * und *' stdout'. –

+0

@ThomasMatthews: Das stimmt, ich habe es der Kürze wegen weggelassen. Habe gerade einen Schnitt gemacht – sjsam

Verwandte Themen