<stdio> versus <iostream>



  • Hallo zusammen,

    ich fange grade an mich mit C und C++ zu beschäftigen.
    Dabei habe ich festgestellt, dass <stdio> (C, printf) deutlich schneller ist als <iostream> (C++, cout).

    Was gibt es bei <iostream> für Vorteile? Es muss ja etwas geben, was den Geschwindigkeitsnachteil wettmacht.

    Grüße



  • Typsicherheit und Erweiterbarkeit.

    In C++ kannst du eigene Streamoperatoren schreiben, die dann (auch) mit cout arbeiten.

    std::ostream& operator<< (std::ostream& stream, const MyType& type);
    

    Du kannst ja mal im C++-Unterforum schauen, was Werner Salomon so alles mit C++-Streams anstellt...



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (alle ISO-Standards) in das Forum C++ (alle ISO-Standards) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • "Dabei habe ich festgestellt, dass <stdio> (C, printf) deutlich schneller ist als <iostream> (C++, cout)."
    wie kommst du darauf?


  • Mod

    unskilled schrieb:

    "Dabei habe ich festgestellt, dass <stdio> (C, printf) deutlich schneller ist als <iostream> (C++, cout)."
    wie kommst du darauf?

    Das wäre schon ein ziemlich schlecht gemachter Benchmark, der das nicht feststellt. cout ist langsamer als printf. Die Stream/Locale-Kombination sind etwas unglücklich designt aus den frühen Zeiten von C++. Würde man heute vermutlich mit irgendwelcher Templatemagie viel besser umsetzen. Aber man hat hier ein Paket mit viel Komplexität mit echten Laufzeitkosten, obwohl kaum jemand diese Komplexität tatsächlich benutzt.



  • SeppJ schrieb:

    unskilled schrieb:

    "Dabei habe ich festgestellt, dass <stdio> (C, printf) deutlich schneller ist als <iostream> (C++, cout)."
    wie kommst du darauf?

    Das wäre schon ein ziemlich schlecht gemachter Benchmark, der das nicht feststellt. cout ist langsamer als printf.

    Das wäre wirklich ein Witz, wenn der OP z.B. ohne Optimierungen kompiliert hätte.
    Haha. Stellt Euch das mal vor! 🙂



  • Hallo Timmi,

    Willkommen im C++-Forum!

    zum Thema Streams und Geschwindigkeit lies z.B. das hier: https://www.c-plusplus.net/forum/310076-full
    ansonsten stimme ich SeppJ zu - die Streams können einfach mehr und das kostet eben. Zudem sind sie in der Vergangenheit in einigen Bibliotheken (z.B. bei Microsoft) schlecht implementiert worden.
    Streams sind in der Anwendung aber IMHO einfacher und ganz bestimmt sicherer als scanf&printf - vorausgesetzt man weiß sie zu nutzen.

    Streams haben 'ne schlechte Lobby; vielleicht weil die Einstiegsschwelle höher ist als bei printf&Co. Meines Erachtens lohnt es sich aber, sich damit zu beschäftigen.
    C++-Streams kann man durchaus kritisch sehen - das ist ok. Wie SeppJ schon schrieb, würde man das heute wohl besser designen. Es ist aber auch verdammt schwer, hier eine gute Lösung zu finde. Dafür sind die Anforderungen, die an ein IO-System gestellt werden, einfach zu vielfältig.
    Und die Leute, die sie rundweg ablehenen, haben sich auch nie wirklich damit befasst.

    BTW.: Geschwindigkeit ist nicht alles - und vielleicht lässt sich auch Dein Programm schneller machen, ohne dass Du auf Streams verzichten musst.

    Gruß
    Werner


Anmelden zum Antworten