C++Guns – RoboBlog

27.01.2019

C++ Guns: Stop using std::endl start using acpl::newline and std::clog std::cerr

Filed under: Allgemein — Tags: — Thomas @ 13:01

Schaut euch mal C++ Weekly - Ep7 Stop Using std::endl an. Eigentlich hat er ja recht, std::endl wird nicht gebraucht. Problem damit (wie immer), es macht mehr als man vermutet. Denn "end line" suggeriert nicht, dass nun ein Zeilenumbruch kommt und auch kein flush(). Das ganze hat bestimmt wieder historische Gründe.

Jedenfalls gibt es neben std::cout auch noch std::cerr und std::clog. Die letzten beiden schreiben nicht nach stdout sondern nach stderr. Wobei std::cerr ungebuffert schreibt. Das macht auch Sinn. Fehlermeldungen und Debug Ausgaben müssen sofort raus geschrieben werden, bevor das Programm abstürzt. Die Log Meldungen können erste gepuffert werden um die Performance nicht zu beeinflussen.

Durch den richtigen Einsatz von std:cout std::cerr und std::clog wird kein std::endl mehr benötigt. Wenn es denn ein normaler Weg gäbe einen Zeilenumbruch zu schreiben...

Wie lernen denn Programmieranfänger in C++ ein Zeilenumbruch zu schreiben? Natürlich mit std::endl ! Wenn die Leute schon bereit sind, will man sie ja nicht gleich wieder mit ASCII Kontrollzeichen verschrecken. Dabei wäre eine newline() Funktion genau wie die endl() so einfach zu implementieren und standardisieren.

Bsp:

template<typename CharT, typename Traits>
inline std::basic_ostream<CharT, Traits>& newline(std::basic_ostream<CharT, Traits>& os) {
    os << '\n';
    return os;
}

std::cout << "Test" << newline;

No Comments

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress