-
char ou string : fichier
Bonjour,
Je voi souvent que les personnes expérimentées du forum conseil d'utiliser le std::string au lieu du char.
Mais alors pourquoi la méthode write de ofstream n'admet pas un type std::string ?
J'ai du utiliser la méthode .c_str() pour transformer mon string en char, mais est-ce que ça réduit beaucoup les performances cette méthode?
Merci d'avance...
-
J'en sais rien mais j'ai vu ça sur la FAQ qui répondra peut etre en parti à ta question:
http://c.developpez.com/faq/cpp/?pag...TRINGS_lenteur
-
La réponse la plus couremment citée est qu'à l'origine, les différentes parties de la ST étaient considérées comme un peu indépendantes (et avaient été développées par des gens différents), et les gens ne voulaient pas imposer aux utilisateur de iostream de devoir inclure le fichier string, pour des raisons de temps de compilation, et d'indépendance entre les différentes parties de la bibliothèque. Déjà que string dépend de iostream, une dépendance dans l'autre sens aurait rendu le tout circulaire, ce qui n'est pas très beau selon certains critères.
A mon avis, il s'agit d'une erreur, qui j'espère sera réparée dans une prochaine version de la norme (il y a de bonnes chances), avec éventuellement des choses plus adaptées pour manier des chemins que ne peut l'être une bête string, comme la classe path que l'on trouve dans boost::filtesystem.
Pour la supposition d'impact sur les perfs, je n'y crois pas :
- Déjà, quand on parle d'accès au disque dur, je suis persuadé que si impact il y a, il est totalement négligeable par rapport au temps de traitement global.
- De plus rien n'aurait empêché de fournir les deux versions, avec char* et std::string, et ce afin de faire plaisir à tout le monde.
-
Accessoirement, write est conçue pour sérializer des buffers d'octets, pas des chaines de caractères.
-
Tu n'as qu'à utiliser std::vector<char>