Ich finde, dass es sehr viel einfacher ist, Streams in C ++ anstelle von Windows-Funktionen wie ReadFile, WriteFile usw. oder sogar fprintf zu verwenden. Wann ist es nicht gut Streams zu verwenden? Wann ist es gut Streams zu verwenden? Ist es sicher Streams zu verwenden? Wie kommt es, dass viele Programmierer keine Streams verwenden?
Das ist nur etwas, worüber ich mich immer gewundert habe und vielleicht kann man etwas Weisheit abwerfen.
Wann ist es nicht gut Streams zu verwenden?
Wann ist es gut, Streams zu verwenden?
Im Allgemeinen.
Ist es sicher, Streams zu verwenden?
Ja, aber Sie müssen vorsichtig sein, wenn Sie einen Stream asynchron teilen.
Wie kommt es, dass viele Programmierer keine Streams verwenden?
Präferenz, Stil oder sie lernten zuerst eine andere Methode (oder andere Sprache). Ich finde, dass viele alte "C ++" -Beispiele online mit einem C-Flavor geschrieben sind, wobei printf bevorzugt wird.
Streams sind im Allgemeinen ziemlich sicher. Unter gewissen Umständen können sie langsam und / oder ungeschickt sein. Langsam ergibt sich hauptsächlich aus der Tatsache, dass sie zwischen Ihrem Code und dem Betriebssystem ein paar zusätzliche Ebenen vorschreiben, und unter Umständen können diese Ebenen zusätzlichen Aufwand verursachen. Die Ungeschicklichkeit ist hauptsächlich im Vergleich zu Cs printf, nicht der direkten Verwendung von etwas wie WriteFile (das Formatierung überhaupt nicht direkt unterstützt). Betrachten Sie jedoch zum Beispiel:
%Vor%bis
%Vor% Wenn Sie sich für i18n interessieren, verwendet printf
eine Zeichenfolge, die einfach aus einer externen Quelle gelesen werden kann, wobei der C ++ - Stream die gesamte Formatierung in die Struktur des Codes einbettet, also fast beliebig Änderung der Formatierung erfordert das Umschreiben des Codes, Neukompilieren und erneutes Verknüpfen.
CreateFile, ReadFile
, etc, erlauben auch eine Reihe von Dingen wie Speicherkarten und überlappendes Lesen und Schreiben, die von Iostreams überhaupt nicht unterstützt werden. Wenn Sie diese Situationen gut nutzen können, sind Iostreams oft nicht wettbewerbsfähig.
Wenn Ihre App auf verschiedenen Plattformen portierbar sein soll.
Wenn Sie mehr prägnanten Code wollen: Win32-Funktionen haben mehr ausgearbeitete Semantik, erfordern oft eine Sammlung von Funktionen, um etwas zu tun, und haben definitiv mehr Parameter.
Es gibt drei Alternativen, die Sie hier erwähnt haben:
Optionen 1 & amp; 2 sind plattformunabhängig. Dies bedeutet, dass Sie den Code für Mac, Linux oder viele andere Betriebssysteme kompilieren können. Option 3 ist nur Windows. Das bedeutet, dass Sie es nur für Windows kompilieren können.
Bei der Entscheidung zwischen den Optionen 1 & amp; 2, ist es an, wie Sie es verwenden möchten. Die C-Bibliothek ist in Bezug auf Sprachen einfacher zu verwenden. Es ist ein Albtraum, Text durch alternative Sprachen in Streams zu ersetzen. Es ist jedoch viel einfacher, Streams threadsicher zu gestalten, komplexere Klassen in ein druckbares Format zu übersetzen und die Stream-Funktionen zu erweitern.
C ++ 's iostream gegen C's stdio ist ein sehr hitziges Argument, das an vielen anderen Stellen in diesem Forum diskutiert wird, wie z C ++ - Streams vs. C-style IO? und andere online-Stellen.
Einer der Gründe, warum ich printf () mag, ist, dass Formatzeichenfolgen selbst Ressourcen sein können, was mehr externe Kontrolle über die Programmausgabe erlaubt, ohne die Neukompilierung zu erzwingen.
Einer der Gründe, warum ich cout () mag, ist die rohe Geschwindigkeit.
Nach meiner Erfahrung ist dies ein ziemlich religiöses Thema.