Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
<stdio.h> statt <iostream> in C++ - Schlechter Stil?
Haltet ihr es für akzeptabel, wenn ein Programmierer in seinem C++-Quelltext Befehle wie cout und cin meidet, und stattdessen lieber printf- und scanf-Methoden verwendet, oder wird das in C++ immer als schlechter Stil angesehen?
Standardmäßig erwarte ich in C++ die iostream-Bibliothek zu verwenden. So gesehen halte ich auch ein Vermeiden dessen eigentlich schon als schlechten Stil, und systematisches Vermeiden eigentlich als schlicht verfehlend. Und wenn ich an Sicherheit, exceptions etc. denke gibt es hier nebst Stilfragen auch technisch relevante Gründe.
Es ist Abwägung, printf ist schnell und kompakt (z.B. für ganz definierte Ausgabe wie %08x). Viele Leute verstehen auf Anhieb, was gewollt ist. Die streams sind da etwas komplizierter, wenn es um die Formatierung geht.
Persönlich: Wumpe, jeder nach seinem Couleur, aber bitter dann konsistent.
@Dexter
An sich ist es egal. Jedoch verfallen viele Programmierer die fröhlich c-Bibliotheken importieren in einen überwiegend prozeduralen anstatt opbjektorientierten Programmierstil. Die resultierenden Programme sind dann gern nah dran an schrecklich.
Ansonsten mehr eine Stilfrage, aber an sich ist vorgesehen den Import von C Bibliotheken in C++ in der Form zu importieren
Solange man keinen wirklichen Grund der dagegen spricht hat sollte man iostream nutzen. Formatierung ist garantiert kein wirklicher Grund. Ich würde das sogar eher als ein Grund sehen der dagegen spricht. Die Formatierungen von iostream sind auf jeden Stream anwendbar. Wenn ich nun Sachen im gleichen Format z.B. einmal in eine Datei und einmal auf stdout ausgeben möchte. Brauch ich einfach nur std:stream als Funktionsparameter und übergebe halt einmal std::cout und einmal std::fstream.
Das Argument "Viele Leute verstehen auf Anhieb, was gewollt ist." ist, naja, ich sag Mal wer C++ kann sollte auch die Formatierungen bei Streams verstehen.^^
@Fonce: Geht auch mit fprintf - generische Interfaces gitbt es nicht erst seit c++
Dexter1997 schrieb:
Haltet ihr es für akzeptabel, wenn ein Programmierer in seinem C++-Quelltext Befehle wie cout und cin meidet, und stattdessen lieber printf- und scanf-Methoden verwendet, oder wird das in C++ immer als schlechter Stil angesehen?
Kommt hatl immer darauf an wofür. Wenn ich ein paar Zahlen in ne Tabelle schreiben will oder sonst bestimmte Anforderungen and die Formatirung habe sind printf und co oft die bessere Lösung.
Für formatierte Ausgaben sind c++ iostreams halt einfach ne Kathastrophe (mit etwas Glück gibts aber bald was besseres in der Standardbibliothek: https://github.com/fmtlib/fmt). Sie haben aber zwei große Vorteile:
- Sicherheit: ein Fehler im Formatstring kann z.B. nicht einfach zu nem pufferüberlauf führen.
- Wenn der aufrufende Code keine präzise Kontrolle über die Formatierung benötigt sind iostreams wesentlich einfach und funktionieren generisch für beliebige (auch komplexe) Objekte:
Code:
stream << foo
funktioniert egal ob foo ein int, double, string, oder irgendeine benutzerdefinierte klasse ist und egal ob stream nun auf die Konsole, eine Datei oder ins Netzwerk schreibt.
Meine Meinung: Man sollte immer das Werkzeug nutzen, mit dem sich die Arbeit am leichtesten erledigen lässt. Meistens sind das std::iostreams (oder eben enie vernünftige externe Bibliothek), aber printf hat (leider) nach wie vor seinen Nutzen.
@blöderidiot: Ist natürlich auch eine Option, aber ich perönlich bevorzuge fmt aus drei Gründen:
- Ich mag die Syntax mit den Parametern IN den Klammern der printf Funktion lieber
- Es kompiliert schneller und läuft angeblich auch schneller (https://github.com/fmtlib/fmt#benchmarks).
- Wie schon gesagt besteht die Hoffnung, dass die Bibliothek in den Standard aufgenommen wird und man dann die gleiche Syntax und Funktionsnamen einfach weiter nutzen kann.