std:: to_chars
|
Défini dans l'en-tête
<charconv>
|
||
|
std
::
to_chars_result
to_chars
(
char
*
first,
char
*
last,
|
(1) |
(depuis C++17)
(constexpr depuis C++23) |
|
std
::
to_chars_result
to_chars ( char * , char * , bool , int = 10 ) = delete ; |
(2) | (depuis C++17) |
|
std
::
to_chars_result
to_chars ( char * first, char * last, /* floating-point-type */ value ) ; |
(3) | (depuis C++17) |
|
std
::
to_chars_result
to_chars
(
char
*
first,
char
*
last,
/* floating-point-type */
value,
|
(4) | (depuis C++17) |
|
std
::
to_chars_result
to_chars
(
char
*
first,
char
*
last,
/* floating-point-type */
value,
|
(5) | (depuis C++17) |
Convertit
value
en une chaîne de caractères en remplissant successivement la plage
[
first
,
last
)
, où
[
first
,
last
)
doit être une
plage valide
.
10..35
(inclus) sont représentés par les caractères minuscules
a..z
. Si value est inférieur à zéro, la représentation commence par un signe moins. La bibliothèque fournit des surcharges pour tous les types entiers signés et non signés sans qualificatif cv, ainsi que pour le type
char
comme type du paramètre
value
.
std::to_chars
rejette l'argument de type
bool
car le résultat serait
"0"
/
"1"
et non
"false"
/
"true"
si elle était autorisée.
Table des matières |
Paramètres
| first, last | - | plage de caractères à écrire |
| value | - | la valeur à convertir en sa représentation sous forme de chaîne |
| base | - | base entière à utiliser : une valeur comprise entre 2 et 36 (inclus). |
| fmt | - | formatage des nombres à virgule flottante à utiliser, un masque de bits de type std::chars_format |
| precision | - | précision des nombres à virgule flottante à utiliser |
Valeur de retour
En cas de succès, retourne une valeur de type
std::to_chars_result
telle que
ec
soit égal à une valeur initialisée par défaut de
std::errc
et que
ptr
soit le pointeur situé juste après le dernier caractère écrit. Notez que la chaîne
n'est pas
terminée par un caractère NUL.
En cas d'erreur, retourne une valeur de type
std::to_chars_result
contenant
std::errc::value_too_large
dans
ec
, une copie de la valeur
last
dans
ptr
, et laisse le contenu de l'intervalle
[
first
,
last
)
dans un état non spécifié.
Exceptions
Ne lance rien.
Notes
Contrairement aux autres fonctions de formatage dans les bibliothèques C++ et C,
std::to_chars
est indépendant des paramètres régionaux, n'effectue pas d'allocation et ne lève pas d'exceptions. Seul un petit sous-ensemble des politiques de formatage utilisées par d'autres bibliothèques (telles que
std::sprintf
) est fourni. Cela vise à permettre l'implémentation la plus rapide possible, utile dans des contextes courants à haut débit tels que l'échange basé sur le texte (
JSON
ou
XML
).
La garantie que
std::from_chars
peut récupérer exactement chaque valeur en virgule flottante formatée par
std::to_chars
est uniquement fournie si les deux fonctions proviennent de la même implémentation.
Pour formater une valeur
bool
en tant que
"0"
/
"1"
en utilisant
std::to_chars
, la valeur doit être convertie en un autre type entier.
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_to_chars
|
201611L
|
(C++17) |
Conversions élémentaires de chaînes (
std::to_chars
,
std::from_chars
)
|
202306L
|
(C++26) | Test de réussite ou d'échec des fonctions <charconv> | |
__cpp_lib_constexpr_charconv
|
202207L
|
(C++23) |
Ajout des modificateurs
constexpr
aux surcharges de
std::to_chars
et
std::from_chars
(
1
)
pour les types entiers
|
Exemple
#include <charconv> #include <iomanip> #include <iostream> #include <string_view> #include <system_error> void show_to_chars(auto... format_args) { const size_t buf_size = 10; char buf[buf_size]{}; std::to_chars_result result = std::to_chars(buf, buf + buf_size, format_args...); if (result.ec != std::errc()) std::cout << std::make_error_code(result.ec).message() << '\n'; else { std::string_view str(buf, result.ptr - buf); std::cout << std::quoted(str) << '\n'; } } int main() { show_to_chars(42); show_to_chars(+3.14159F); show_to_chars(-3.14159, std::chars_format::fixed); show_to_chars(-3.14159, std::chars_format::scientific, 3); show_to_chars(3.1415926535, std::chars_format::fixed, 10); }
Sortie possible :
"42" "3.14159" "-3.14159" "-3.142e+00" Value too large for defined data type
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 2955 | C++17 | cette fonction était dans <utility> et utilisait std::error_code | déplacée vers <charconv> et utilise std::errc |
| LWG 3266 | C++17 | bool l'argument était accepté et promu en int | rejeté par une surcharge supprimée |
| LWG 3373 | C++17 |
std::to_chars_result
pouvait avoir des membres supplémentaires
|
les membres supplémentaires sont interdits |
Voir aussi
|
(C++17)
|
le type de retour de
std::to_chars
(classe) |
|
(C++17)
|
convertit une séquence de caractères en une valeur entière ou à virgule flottante
(fonction) |
|
(C++11)
|
convertit une valeur entière ou à virgule flottante en
string
(fonction) |
|
(C++11)
|
imprime une sortie formatée vers
stdout
, un flux de fichier ou un tampon
(fonction) |
|
insère des données formatées
(fonction membre publique de
std::basic_ostream<CharT,Traits>
)
|