ifstream und ofstream oder fstream sind mit in und out
Beim Umgang mit Dateien, welche der beiden folgenden Beispiele wird bevorzugt?
Kennt einer eine bessere Leistung als die anderen? Gibt es überhaupt einen Unterschied?
ifstream input("input_file.txt");
ofstream output("output_file.txt");
vs
fstream input("input_file.txt",istream::in);
fstream output("output_file.txt",ostream::out);
Mit einem
istream
wo ein ostream
erwartet wird, führt zu einem Fehler, wird dies erspart Ihnen eine Menge Kopfzerbrechen dann, wenn Sie versehentlich eine fstream
eröffnet im input-Modus, die der compiler nicht meckern.InformationsquelleAutor Ishan M | 2015-05-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Performance-wise, gibt es wahrscheinlich nur vernachlässigbare Unterschiede in diesem Fall. Am besten man spart ein wenig Speicher.
Was zählt, ist, dass der erste Fall hilft bei der Semantik: eine
std::fstream
geöffnet werden konnte in Eingang, Ausgang oder beides. Weil dieses, müssen Sie überprüfen Sie die Erklärung, um sicher zu sein, während mitstd::ifstream
undstd::ofstream
klar wird, was du tust. Der zweite Fall hat mehr Raum für menschliche Fehler, die ist, warum es vermieden werden sollte.Meine eigene Faustregel ist die Verwendung eines
std::fstream
wenn Sie müssen lese-und Schreibzugriff auf die Datei, und nur in diesem Fall.InformationsquelleAutor meneldal
Verwenden Sie einfach die knapperen form, es sei denn, Sie brauchen unterschiedliche Verhalten... zu tun, sonst ist nur zu schaffen Sie Raum für Fehler mehr. FWIW, wenn möglich, ich bevorzuge, um den Umfang der stream und überprüfen Sie das öffnen funktionierte folgendermaßen:
auf jeden Fall - ich kann mich nicht erinnern, das Letzte mal habe ich
is_open()
.Diese Methode hat ein paar interessante Punkte: Der stream wird nur Leben, bis das Ende der
if
so dass Sie nicht haben, um über sorgen zu vergessen, die Datei zu schließen und Sie können mit der impliziten Konvertierung zu bool des streams.Nur ein Hinweis, dass diese Antwort generiert, noch eine Frage, und es scheint, dass diese syntax ist nicht ganz gültig. Brace-Initialisierung funktionieren würde für C++11 und später, wenn.
danke - muss nicht-Standard-Erweiterung auf einige compiler ich verwendete vorher angenommen Klammern, aber gefunden haben, mich brauchen zu verwenden Klammern kürzlich. Antwort entsprechend aktualisiert. Cheers.
InformationsquelleAutor Tony Delroy