"\n" oder endl?
-
Hallo!
Ich wollt mal wissen, wo denn der Unterschied zwischen "\n" und endl liegt. Beide Varianten werden häufig verwendet, aber irgendwie sehe ich ... << endl; häufiger als "\n";. Ist das nur eine Frage des Stils, oder gibt's da tatsächlich irgendwelche Unterschiede? Ich meine es ist doch viel praktischer einfach
cout << "Hello World!\n";
statt
cout << "Hello World!" << endl;
zu schreiben.
mfg
-
\n ist besser.
weil endl '\n' plus flush ist. du willst gar nicht flushen.
bei cout nicht, weil das automatisch flusht.
bei dateien nicht, weil es lahm wäre.
bei log-dateien woll ma flushen.
aber naja, da kann man auchlog << "Hello World!\n" << flush;
schreiben.
Ich vermute, endl ist eher aus Versehen passiert, als sich jemand von der Begeisterung hat übermannen lassen, daß das überhaupt so möglich ist.Newbie-Bücher verwenden gerne endl, weil sie dadurch nicht auf den ersten Seiten das erschreckende Thema Escape-Sequenzen aufmachen müssen.
-
Okay, danke^^
Also ist das Buch "Der C++ Programmierer" ein Newbie-Buch?
Und was bedeutet eigentlich "flushen"?
-
Incocnito schrieb:
Und was bedeutet eigentlich "flushen"?
Um die Geschwindigkeit zu erhöhen werden die Ein- & Ausgaben zuerst in einem Puffer gesammelt und dann in größeren Blöcken bspw. in eine Datei oder auf den Bildschirm geschrieben. Flushen bedeutet "jetzt den Inhalt des Puffers an das Ziel schreiben".
MfG SideWinder
-
Immer gleich zu flushen wäre z.B. dann geschickt, wenn du einen Compiler schreibst und (d)eine IDE deinen Output "live" mitlesen können soll.
-
Flushen ist auch sinnvoll wenn du dein Programm gleich nach der Ausgabe beendet sein kann (freiwiilig oder unfreiwillig). Es kann nämlich sein, dass das Zeugs noch im Puffer steht und noch nicht ausgegeben wurde - und du wunderst dich warum du nix siehst (und glaubst vielleicht sogar, dass das Programm gar nicht bis zur Zeile mit der Ausgabe abgearbeitet wurde).
Das ist auch der Grund warum es sinnvoll ist bei logfiles/debug messages immer zu flushen.
-
wxSkip schrieb:
Immer gleich zu flushen wäre z.B. dann geschickt, wenn du einen Compiler schreibst und (d)eine IDE deinen Output "live" mitlesen können soll.
Nein.
Der Compiler haut die Zeilen so schnell raus, daß man auch auf die Pufferüberläufe keine Zehntelsekunden warten muß. Häufiges Flushen würde nur die Gesamtperformance senken.
-
volkard schrieb:
wxSkip schrieb:
Immer gleich zu flushen wäre z.B. dann geschickt, wenn du einen Compiler schreibst und (d)eine IDE deinen Output "live" mitlesen können soll.
Nein.
Der Compiler haut die Zeilen so schnell raus, daß man auch auf die Pufferüberläufe keine Zehntelsekunden warten muß. Häufiges Flushen würde nur die Gesamtperformance senken.Da haste natürlich auch recht, aber ich schreib grad nen Compiler, der auch Zwischeninfos (Fortschritt, Versionsnummer, ...) ausgibt und am Ende optional noch nen anderen Compiler aufruft - und der muss ja nicht unbedingt gleich den Puffer flushen. Den Flush aber erst am Ende der Fehlerausgabe durchzuführen, ist allerdings eine gute Idee.