std::stof, std::stod, std::stold
| 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.
std::strtof(str.c_str(), &ptr).std::wcstof(str.c_str(), &ptr).std::strtod(str.c_str(), &ptr).std::wcstod(str.c_str(), &ptr).std::strtold(str.c_str(), &ptr).std::wcstold(str.c_str(), &ptr).La fonction ignore tous les caractères blancs (déterminés par std::isspace) jusqu'à ce qu'un premier caractère non blanc soit trouvé. Ensuite, elle prend autant de caractères que possible pour former une représentation valide d'un nombre à virgule flottante et les convertit en une valeur à virgule flottante. La valeur à virgule flottante valide peut être l'une des suivantes :
- une expression décimale à virgule flottante. Elle est composée des parties suivantes :
- (optionnel) signe plus ou moins
- séquence non vide de chiffres décimaux contenant éventuellement un caractère de point décimal (déterminé par la locale C courante) (définit la mantisse)
- (optionnel)
eouEsuivi 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)
- une expression hexadécimale à virgule flottante. Elle est composée des parties suivantes :
- (optionnel) signe plus ou moins
0xor0X- séquence non vide de chiffres hexadécimaux contenant éventuellement un caractère de point décimal (déterminé par la locale C courante) (définit la mantisse)
- (optionnel)
pouPsuivi 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)
- une expression d'infini. Elle est composée des parties suivantes :
- (optionnel) signe plus ou moins
INFouINFINITYsans tenir compte de la casse
- une expression de nombre non numérique (NaN). Elle est composée des parties suivantes :
- (optionnel) signe plus ou moins
NANouNAN(char_sequence )sans tenir compte de la casse de la partieNAN. char_sequence ne peut contenir que des chiffres, des lettres latines et des tirets bas. Le résultat est une valeur à virgule flottante NaN silencieuse.
- toute autre expression qui peut être acceptée par la locale C actuellement installée.
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'index de ce caractère sera calculé et stocké dans *pos, donnant le nombre de caractères qui ont été traités par la conversion.
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
|
Cette section est incomplète
Raison : aucun 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) |