Probablement le plus commun de moyen facile enveloppements essentiellement de votre deuxième choix dans un modèle nommé lexical_cast
, comme celui de Boost, de sorte que votre code ressemble à ceci:
int a = 10;
string s = lexical_cast<string>(a);
Un concept est qu'il prend en charge d'autres distributions (par exemple, dans la direction opposée fonctionne tout aussi bien).
Notez également que, bien que Boost lexical_cast a commencé comme simple fait d'écrire à un stringstream, puis l'extraire de retour de courant, il y a maintenant un couple d'ajouts. Tout d'abord, les spécialisations pour un certain nombre de types ont été ajoutés, de sorte que pour de nombreux types, c'est beaucoup plus rapide que d'utiliser un stringstream. Deuxièmement, il vérifie le résultat, donc (par exemple) si la conversion à partir d'une chaîne en int
, il peut lancer une exception si la chaîne contient quelque chose qui n'a pas pu être convertie en int
(par exemple, 1234
serait un succès, mais 123abc
jeter).
Edit (car c'est un peu vieux):
Que de C++11, il y a un std::to_string
fonction surchargée pour les types d'entiers, de sorte que vous pouvez utiliser un code comme:
int a = 20;
std::string s = to_string(a);
La norme définit comme étant l'équivalent de faire la conversion avec sprintf
(en utilisant le spécificateur de conversion qui correspond à l'fournie type d'objet, comme %d
pour int
), dans un tampon de taille suffisante, puis en créant une std::string
du contenu de la mémoire tampon.