[débutant mais pas trop] conversion string->entier
Bonjour,
dans la FAQ, il est expliqué Comment convertir une string en un entier, il faut passer par un std::istringstream.
Moi ça m'embète un peu, vu que la fonction strtol me le fait aussi, mais sans avoir besoin d'une variable supplémentaire. Est-ce qu'il y a une bonne raison de préférer la méthode de la faq à strtol? A part "strtol c'est du C et pas du C++", ou alors expliquez-moi pourquoi ceci est une bonne raison s'il vous plait. Car c'est vrai que je suis "obligé" d'utiliser du C++, car j'ai besoin d'objets, d'héritage, de polymorphisme, etc etc, mais parfois pour faire un "petit truc " du genre, le C++ devient plus compliqué que le C et j'aimerais savoir pourquoi, dans ces moments, je devrais quand même insister et fuir la "simplicité du C" comme la peste.
Je vois déja venir qqun me dire que crée une variable de plus c'est pas très compliqué. En effet. Mais d'une part ça n'est pas la question, et d'autre part, ça m'amène à une deuxième question:
Comment convertir un string en un réel?
Dans la faq, il y a bien Comment convertir une string en un objet de n'importe quel type Mais la ça devient franchement plus compliqué qu'un simple strtod non?
merci d'avance de me donner vos avis
Re: [débutant mais pas trop] conversion string->entier
Citation:
Envoyé par Biosox
Moi ça m'embète un peu, vu que la fonction strtol me le fait aussi, mais sans avoir besoin d'une variable supplémentaire. Est-ce qu'il y a une bonne raison de préférer la méthode de la faq à strtol? A part
Je pense que la principale raison en l'occurence est l'extensibilité. Le C a prévu des fonctions pour convertire quelques types de base. Le C++ part lpus sur un framework permettant de convertir tous les types, y compris ceux définis par toi. C'est plus lourd à comprendre, certes, mais a priori plus simple à utiliser. Exemple :
Code:
1 2 3 4 5
|
template <class T> f(T &t)
{
t = strto??("toto");
} |
Avec une fonction de conversion C, je ne sais pas faire (dans le même ordre d'idée, voir MAX_INT et std::numeric_limits<int>::max()).
Une autre raison possible, pour les conversions vers les strings surtout, est que de toute façon, il faudra dans la plupart des cas spécifier un formattage, alors autant réutiliser le formattage déjà défini pour l'affichage.
Quand cette dernière contrainte n'est pas importante, et les perfs non plus, boost::lexical_cast est effectivement très agréable.