Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
magynhard Super JLI'ler
Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 11.05.2003, 14:47 Titel: unterschied zwischen endl und \n ? |
|
|
Hi,
hab gerade mit jemandem im chat über proggen geplaudert.
Da kam auch endl ins Gespräch, das z.B. so eingesetzt wird:
Code: |
cout << "Hallo Welt!" << endl;
|
hat aber für den Anweder den selben Effekt wie
Code: |
cout << "Hallo Welt!\n";
|
Mein Gesprächspartner meinte irgendwas mit flush und das mit endl auch das ausgegebene aus dem Speicher gelöscht wird und \n nur für newline steht.
Kann mich jemand aufklären? |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 11.05.2003, 14:57 Titel: |
|
|
Ein Blick auf den Code genügt doch, wofür musst du hier posten!?
Code: |
template<class _E, class _Tr> inline
basic_ostream<_E, _Tr>&
__cdecl endl(basic_ostream<_E, _Tr>& _O)
{_O.put(_O.widen('\n'));
_O.flush();
return (_O); }
|
Dem Stream wird ein Line Feed Zeichen angefügt und dann wird flush() aufgerufen. Ein Blick in die MSDN sagt mir: Alles was noch im Stream ist wird in den Ausgabepuffer geschrieben. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
magynhard Super JLI'ler
Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 11.05.2003, 15:38 Titel: |
|
|
Ich versteh nur Bahnhof
Ich weiß auch nicht was flush sein soll. |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 11.05.2003, 15:50 Titel: |
|
|
Wichtig an dem Code und für deine Frage ist, dass endl ein '\n' ausgibt und dann ein flush() ausführt - damit wird ein Newline an den Stream gesendet und alle Zeichen, die sich noch im Puffer befinden ausgegeben.
D.h. dass dein Gesprächspartner keinen Blödsinn erzählt hat.
P.S.: Ohne Hazels Code hätte ich dir (fälschlicher Weise) erzählt, dass endl nicht anderes als
#define endl '\n'
ist - wäre schlecht gewesen...
Christian |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 11.05.2003, 16:21 Titel: |
|
|
Anscheinend weißt du noch nicht was Streams sind... stell dir das wie eine Warteschlange von Bytes vor, die bei einem Ausgabepuffer(z.B. dem Textspeicher deiner Grafikkarte) endet. Du füllst den Stream z.B. mit cout << "bla"... das heißt aber nicht, dass sofort alle Zeichen im Speicher(und somit auf dem Bildschirm) landen. Ich hatte da damals in meinem ersten Logging System einen Bug: Das Programm ist abgestürzt bevor alle Zeichen in der Datei gelandet sind. Mit flush()-en kann man sowas vermeiden. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 11.05.2003, 16:26 Titel: |
|
|
Ach ja, vielleicht sollte ich dir den Codeausschnitt nochmal besser erklären:
Zitat: |
template<class _E, class _Tr> inline
basic_ostream<_E, _Tr>&
__cdecl endl(basic_ostream<_E, _Tr>& _O)
{
_O.put(_O.widen('\n')); // <-- Hier wird dem Stream ein \n angehängt
_O.flush(); // <-- hier wird gefluscht
return (_O);
}
|
Der Rest ist in diesem Falle für dich unwichtig und warscheinlich auch noch zu hoch... es sei denn, du weißt schon was Templates, Inlining ist und Stream-Klassen sind. ;) _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
magynhard Super JLI'ler
Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 11.05.2003, 18:10 Titel: |
|
|
Danke,
ja ich wusste nicht was Streams waren
Wäre endl dann eigentlich immer besser als \n , wenn man damit so manchen Fehler vermeiden kann?
Oder hat \n auch Vorteile, außer dass es in Strings verwendet werden kann und kürzer ist? |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 11.05.2003, 18:33 Titel: |
|
|
\n ist kein Befehl sonder einfach nur ein Sonderzeichen und brauch somit nicht weiter verarbeitet werden. endl ist eine Funktion die auch noch weitere Funktionen aufruft -> braucht länger. Also wenn deine Funktion schnell sein muss würde ich auf endl verzichten. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
|