Namespaces
Variants

std:: stof, std:: stod, std:: stold

From cppreference.net
std::basic_string
Défini dans l'en-tête <string>
float stof ( const std:: string & str, std:: size_t * pos = nullptr ) ;
(1) (depuis C++11)
float stof ( const std:: wstring & str, std:: size_t * pos = nullptr ) ;
(2) (depuis C++11)
double stod ( const std:: string & str, std:: size_t * pos = nullptr ) ;
(3) (depuis C++11)
double stod ( const std:: wstring & str, std:: size_t * pos = nullptr ) ;
(4) (depuis C++11)
long double stold ( const std:: string & str, std:: size_t * pos = nullptr ) ;
(5) (depuis C++11)
long double stold ( const std:: wstring & str, std:: size_t * pos = nullptr ) ;
(6) (depuis C++11)

Interprète une valeur à virgule flottante dans une chaîne str .

Soit ptr un pointeur interne (aux fonctions de conversion) de type char * (1,3,5) ou wchar_t * (2,4,6) , en conséquence.

1) Appelle std:: strtof ( str. c_str ( ) , & ptr ) .
2) Appelle std:: wcstof ( str. c_str ( ) , & ptr ) .
3) Appelle std:: strtod ( str. c_str ( ) , & ptr ) .
4) Appelle std:: wcstod ( str. c_str ( ) , & ptr ) .
5) Appelle std:: strtold ( str. c_str ( ) , & ptr ) .
6) Appelle std:: wcstold ( str. c_str ( ) , & ptr ) .

La fonction ignore tous les caractères d'espacement (tels que déterminés par std::isspace ) jusqu'à ce que le premier caractère non-espace soit trouvé. Ensuite, elle prend autant de caractères que possible pour former une représentation valide en virgule flottante et les convertit en une valeur flottante. La valeur flottante valide peut être l'une des suivantes :

  • expression décimale en virgule flottante. Elle se compose des parties suivantes :
  • (optionnel) signe plus ou moins
  • séquence non vide de chiffres décimaux contenant optionnellement un caractère de séparation décimale (tel que déterminé par la locale C actuelle) (définit la mantisse)
  • (optionnel) e ou E suivi d'un signe moins ou plus optionnel et d'une séquence non vide de chiffres décimaux (définit l'exposant en base 10 )
  • expression en virgule flottante hexadécimale. Elle se compose des parties suivantes :
  • (optionnel) signe plus ou moins
  • 0x ou 0X
  • séquence non vide de chiffres hexadécimaux contenant optionnellement un caractère de point décimal (tel que déterminé par la locale C actuelle) (définit la mantisse)
  • (optionnel) p ou P suivi d'un signe moins ou plus optionnel et d'une séquence non vide de chiffres décimaux (définit l'exposant en base 2 )
  • expression d'infini. Elle se compose des parties suivantes :
  • (optionnel) signe plus ou moins
  • INF ou INFINITY en ignorant la casse
  • expression non numérique. Elle se compose des parties suivantes :
  • (optionnel) signe plus ou moins
  • NAN ou NAN( char_sequence  ) en ignorant la casse de la partie NAN . char_sequence ne peut contenir que des chiffres, des lettres latines et des tirets bas. Le résultat est une valeur flottante NaN silencieuse.
  • toute autre expression qui peut être acceptée par la locale C actuellement installée locale .

Si pos n'est pas un pointeur nul, alors ptr recevra l'adresse du premier caractère non converti dans str. c_str ( ) , et l'indice de ce caractère sera calculé et stocké dans * pos , donnant le nombre de caractères traités par la conversion.

Table des matières

Paramètres

str - la chaîne à convertir
pos - adresse d'un entier pour stocker le nombre de caractères traités

Valeur de retour

La chaîne convertie en type à virgule flottante spécifié.

Exceptions

std::invalid_argument si aucune conversion n'a pu être effectuée.

std::out_of_range si la valeur convertie sortirait de la plage du type de résultat ou si la fonction sous-jacente ( std::strtof , std::strtod ou std::strtold ) définit errno à ERANGE .

Exemple

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 2009 C++11 std::out_of_range ne serait pas levée si la valeur convertie
sortirait de la plage du type de résultat
lèvera
LWG 2403 C++11 stof appelait std::strtod ou std::wcstod stof appelle std::strtof ou std::wcstof

Voir aussi

(C++11) (C++11) (C++11)
convertit une chaîne en entier signé
(fonction)
(C++11) (C++11)
convertit une chaîne en entier non signé
(fonction)
(C++17)
convertit une séquence de caractères en valeur entière ou à virgule flottante
(fonction)