Was ist das Fiasko von C++ iostream endl?

Lesezeit: 3 Minuten

Was ist das Fiasko von C iostream endl
Tod

Ich hörte a Google Talk von Andrei Alexandrescu über die D-Programmierung Sprache, als er einen Einzeiler über das “endl”-Fiasko rausschmiss. Ich dachte nur, endl sei der bevorzugte Weg, um das Ende einer Zeile anzuzeigen und den Puffer für einen Stream zu leeren. Warum gilt es als Fiasko? Sollte ich es nicht in meinem Code verwenden?

  • @ildjarn: Du hast zu 100% recht. Ich wusste, dass es die Puffer leert und trotzdem ~75 Punkte verloren hat CEOI 2008 dafür! Schlechte Angewohnheiten!

    – Jakow Galka

    30. März 2011 um 21:15 Uhr


  • @ildjarn Mein Lehrer besteht darauf, dass wir es verwenden std::endl für alles eher als \n, dem ich zustimme, ist ziemlich seltsam. Aber andererseits schreiben wir nur einfache Konsolenprogramme. Aber andererseits scheint er zu glauben, dass das Initialisieren einer (POD-)Variablen in einer Schleife ein potenzielles Leistungsproblem ist …

    – Maxpm

    30. März 2011 um 21:17 Uhr

  • Ich habe den Link hinzugefügt, auch ich habe den Link auf gefunden erdani.com

    – Tod

    30. März 2011 um 21:24 Uhr

  • @Tod Thats Alexandrescus Homepage 🙂

    – Tom

    30. März 2011 um 21:26 Uhr

1646646016 181 Was ist das Fiasko von C iostream endl
ildjarn

(Ich nehme an) Er meint nur, dass viele, besonders neue, C++-Programmierer verwenden std::endl blind statt '\n' für Zeilenumbrüche, die unnötig häufig spülen und möglicherweise die Leistung ihres Programms miserabel machen.

Das heißt, das wird den meisten Menschen beigebracht std::endl ist der kanonische Möglichkeit, einen Zeilenumbruch in einen Stream einzufügen, obwohl dies sehr selten vorkommt notwendig oder geeignet, um es zu spülen.

Das ist die Meinung einiger Leute (*hust*). std::endl sollte nicht einmal im Standard sein, da es so selten angebracht ist und nicht a bedeutsam Eingabe von Einsparungen über '\n' << std::flush ohnehin.


TL;DR(S):

  • Schlussendlich, std::endl kauft dir nichts außer meist schlechter Leistung u normalerweise mehr tippen.
  • Es hat seine Verwendungen, aber sie sind erheblich seltener, als die Häufigkeit der Verwendung in den meisten großen Codebasen vermuten lässt, daher …
  • Seine Nützlichkeit ist höchst fragwürdig und seine Allgegenwärtigkeit ist absurd – in der Tat ein Fiasko!

  • AFAIK einige Leute denken, dass es der “plattformneutrale” Weg ist, einen Zeilenumbruch einzufügen, ohne das zu wissen \n ist der Zeilenumbruch in C, und das \n->plattformspezifische Zeilenabschlusskonvertierung wird vom Stream gehandhabt.

    – Matteo Italien

    30. März 2011 um 21:27 Uhr

  • Reden wir hier von vorzeitiger Optimierung? Es ist schön, ein einfach zu verwendendes Endzeilen-Ding für Ihre Ausgabe zu haben. Besonders wenn Sie die Sprache lernen und nicht sofort sehen, was ‘\n’ für die Ausgabe tun würde. Nachdem Sie gelernt haben, Ihren Code zu profilieren, können Sie andere Optionen in Betracht ziehen!

    – Bo Persson

    30. März 2011 um 22:42 Uhr


  • @Bo Persson: Das größere Problem (in meinen Augen) ist, dass, wenn es keine gäbe std::endldann würde man den Leuten beibringen, es zu benutzen '\n' von Anfang an, und wie '\n' ist dann kürzer zu tippen std::endl (und das gleiche wie endl) Ich würde sagen, es ist auch einfach zu bedienen. :-]Schlussendlich, std::endl kauft Ihnen nichts außer schlechterer Leistung und normalerweise mehr Tipparbeit.

    – Ildjarn

    30. März 2011 um 22:58 Uhr

  • @Bo Persson: Ich denke, eine andere Art, es zu formulieren, wäre die Existenz und Allgegenwart von std::endl ist eine verfrühte Pessimierung mehr als die Verwendung '\n' ist eine vorzeitige Optimierung.

    – Ildjarn

    30. März 2011 um 23:01 Uhr


  • @ildjarn: Es bringt dir nichts, außer schlechtere Leistung, mehr Tippen und Spülung. Ich wurde davon gebissen, einem Programm, das abstürzte, Spuren hinzuzufügen, um zu erkennen, wann/wo und verwirrt war, denn wenn Sie nicht spülen, bedeutet das Fehlen der Nachricht in der Ausgabe nicht, dass die Spur nicht erreicht wurde, sie hätte erreicht werden können und nicht gespült.

    – David Rodríguez – Dribeas

    28. Oktober 2011 um 7:23 Uhr

964870cookie-checkWas ist das Fiasko von C++ iostream endl?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy