C++11 : conversions standards entre nombres et strings

Posté par seiyar81 le 26 avril 2014 | Laisser un commentaire (0)

Dans la version C++03 il n’y avait pas de façon standard de convertir des nombres en strings, il fallait passer par un stringstream.

int i = 666;
std::stringstream stream;
stream << i;
std::string s = stream.str();

Ou passer par une version template pour la conversion nombre / string ou string / nombre.

template <typename T>
std::string toString(T const & value)
{
   std::stringstream stream;
   stream << value;
   return stream.str();
}

template <typename T>
T valueOf(std::string const & text)
{
   T value;
   std::stringstream stream(text);
   stream >> value;
   return value;
}

Mais avec C++11 on dispose maintenant de fonctions standars pour effectuer ces conversions. Il suffit d’inclure le header <header>.

auto s  = std::to_string(666);
auto ws = std::to_wstring(6.66);

Fonctions qui retournent respectivement une std::string ou une std::wstring.

Et pour les conversions dans le sens string vers nombre il existe les fonctions suivantes :

  • stoi: integer signé
  • stol: long signé
  • stoll: long long signé
  • stoul: long non signé
  • stoull: long long non signé
  • stof: float
  • stod: double
  • stold: long double

Il faut retenir que ces fonctions jetent des exceptions en cas d’entrée invalide.

Catégorie: C++ | Laisser un commentaire (0)