{"id":4092,"date":"2019-01-27T13:07:19","date_gmt":"2019-01-27T12:07:19","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=4092"},"modified":"2019-01-27T13:07:31","modified_gmt":"2019-01-27T12:07:31","slug":"c-guns-stop-using-stdendl-start-using-acplnewline-and-stdclog-stdcerr","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=4092","title":{"rendered":"C++ Guns: Stop using std::endl start using acpl::newline and std::clog std::cerr"},"content":{"rendered":"<p>Schaut euch mal <a href=\"https:\/\/www.youtube.com\/watch?v=GMqQOEZYVJQ\">C++ Weekly - Ep7 Stop Using std::endl<\/a> an. Eigentlich hat er ja recht, <em>std::endl<\/em> 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 <em>flush()<\/em>. Das ganze hat bestimmt wieder historische Gr\u00fcnde.<\/p>\n<p>Jedenfalls gibt es neben <em>std::cout<\/em> auch noch <em>std::cerr<\/em> und <em>std::clog<\/em>. Die letzten beiden schreiben nicht nach <em>stdout<\/em> sondern nach <em>stderr<\/em>. Wobei <em>std::cerr<\/em> ungebuffert schreibt. Das macht auch Sinn. Fehlermeldungen und Debug Ausgaben m\u00fcssen sofort raus geschrieben werden, bevor das Programm abst\u00fcrzt. Die Log Meldungen k\u00f6nnen erste gepuffert werden um die Performance nicht zu beeinflussen.<\/p>\n<p>Durch den richtigen Einsatz von <em>std:cout<\/em> <em>std::cerr<\/em> und <em>std::clog<\/em> wird kein <em>std::endl<\/em> mehr ben\u00f6tigt. Wenn es denn ein normaler Weg g\u00e4be einen Zeilenumbruch zu schreiben...<\/p>\n<p>Wie lernen denn Programmieranf\u00e4nger in C++ ein Zeilenumbruch zu schreiben? Nat\u00fcrlich mit <em>std::endl<\/em> ! Wenn die Leute schon bereit sind, will man sie ja nicht gleich wieder mit ASCII Kontrollzeichen verschrecken. Dabei w\u00e4re eine <em>newline()<\/em> Funktion genau wie die <em>endl()<\/em> so einfach zu implementieren und standardisieren.<\/p>\n<p>Bsp:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\ntemplate&lt;typename CharT, typename Traits&gt;\r\ninline std::basic_ostream&lt;CharT, Traits&gt;&amp; newline(std::basic_ostream&lt;CharT, Traits&gt;&amp; os) {\r\n    os &lt;&lt; '\\n';\r\n    return os;\r\n}\r\n\r\nstd::cout &lt;&lt; &quot;Test&quot; &lt;&lt; newline;\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>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\u00fcnde. Jedenfalls gibt es neben [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[17],"class_list":["post-4092","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-cpp"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/4092","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4092"}],"version-history":[{"count":5,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/4092\/revisions"}],"predecessor-version":[{"id":4097,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/4092\/revisions\/4097"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4092"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4092"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4092"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}