FILE vs fstream

Doublons possibles:
Std :: ifstream est-il beaucoup plus lent que FILE?
Quelle bibliothèque d’E / S utilisez-vous dans votre code C ++?

Je me demandais quels sont les avantages ou les inconvénients de l’utilisation de Fstream sur FILE en C ++?

Le seul pro que je pense est que FILE est plus efficace que fstream.

On est C et on est C ++. Tomate, tomate. (Cette expression ne fonctionne pas aussi bien lorsque vous l’écrivez.) J’imagine qu’il est peu probable que vous constatiez une différence de performances.

Une personne très inclinée en C ++ et anti-C vous dira probablement quelque chose comme si vous fstream gérer plus facilement différents types. Avec FILE vous avez deux options: traiter en octets ou en chaînes de format. Depuis printf ou fwrite et al. Je ne sais pas quel est le “vrai” type d’arguments, cela facilite les choses. Il y a aussi le fait qu’une classe C ++ aura un destructeur et donc vous obtenez le nettoyage “gratuitement” lorsque l’object sort de la scope. (Bien que … Voulez-vous vraiment que quelque chose comme fflush se produise en silence chez un destructeur? Probablement pas.) À ce genre d’arguments, je dirais que l’utilisation de FILE n’est pas vraiment un fardeau, mais bon, certaines personnes pensent plus fortement que moi sur ces questions.

En fin de compte, votre application tente de faire exactement ce que vous tentez de faire, et il se peut que FILE , fstream , ou les deux, fstream à vos besoins.

Choisissez ce qui fonctionne, soyez flexible avec ce que les autres choisissent, comprenez les arguments et ne devenez pas trop religieux à ce sujet. C’est mon conseil. 🙂

  • Fstream est une meilleure encapsulation et a des concepts de niveau supérieur.
  • fstream est exceptionnellement sauf.
  • Fstream est également un stream et peut être traité de manière générique comme un stream.

Imaginer:

vide lu (istream & istr)

Nous pourrions passer dans un ifstream, un istrstream ou même un cin. Ceci est très utile pour les tests unitaires.

std::fstream est typé, prend en charge l’internationalisation et est plus facile à utiliser (warning: avis).

Quand un std::fstream sort de sa scope, il est détruit pour vous, que vous ayez ou non oublié de le fstream::close() .