Q
Th schrieb:
queer_boy: was gefällt dir denn an 'endl' nicht? Schreibst du dort immer '\n'
und/oder hast du etwas gegen den automatischen flush()-Aufruf. Ich persönlich (sowie anscheinend auch die Entwickler der Standard-Lib) finde es gut, daß jede Zeile geflusht wird.
da die diskussion hier sowieso schon ziemlich off-topic ist - die meiste zeit im standardausgabe-leben benötigt man flushs gar nicht, noch viel weniger oft in kombination mit einem newline. oft ist ein ständiges flushen sogar unerwünscht (in einer zeitkritischen schleife zum beispiel), und die wenigen male, die man es braucht, ist noch dazu std::flush angebrachter (weil auch aussagekräftiger) als std::endl .
Th schrieb:
queer_boy: was gefällt dir denn an 'endl' nicht? Schreibst du dort immer '\n'
ja. die meiste zeit erspart einen das sogar wahnsinnig viel tipparbeit.
//statt
cout << "Bitte, bitte, sag etwas..." << endl;
cout << endl;
cout << endl;
//(gesehen so oder so ähnlich in diesem thread)
//einfacher:
cout << "Bitte, bitte, sag etwas...\n\n\n";
(abgesehen davon besteht '\n' nur aus vier zeichen, endl im schlimmsten fall aus neun, std::endl aber mindestens aus fünf - aber das tippargument zählt mal nicht)
das problem ist ähnlich wie bei post- vs. präinkrement. das eine erzeugt einen zusätzlichen effekt, der in der regel nicht gebraucht wird. nur fallen mir weniger tatsächlich notwendige einsätze von endl als von x++ ein. (und das ist der punkt, an dem meine argumentation hängt.)
und wenn man von anfang an lernt, std::endl für ein newline einzusetzen, kommt eben code raus, wie der oben. und dass dieser code nicht gerade der beste ist (drei-vier unnötige flushs), bekommt doch wohl zustimmung - auch aus gründen der konsistenz (hoppla, das war ja wieder on-topic ) sollte man daher so weit es geht auf std::endl verzichten.
Th schrieb:
und/oder hast du etwas gegen den automatischen flush()-Aufruf. Ich persönlich (sowie anscheinend auch die Entwickler der Standard-Lib) finde es gut, daß jede Zeile geflusht wird.
die entwickler der standard-lib?
ich habe nichts gegen einen automatischen flush-aufruf, wenn er gebraucht wird. aber std::endl ruft flush nicht automatisch auf, sondern explizit.
cin >> var , das ruft flush automatisch auf. das ist gut so.
für die seltenen fälle, in denen man eine neue zeile nach der ausgabe einer variable haben möchte, habe ich hier auch schon die empfehlung gelesen, sich so etwas zu definieren:
const char nl = '\n';
//...
cout << var << nl;
btw. die empfehlung, auf std::endl zu verzichten, wurde irgendwann vor nicht allzulanger zeit hier im forum auch direkt neben dem post-/präinkrement-gebet gepredigt.
ich lasse mich natürlich gerne vom gegenteil überzeugen