Namespaces
Variants

std:: to_chars_result

From cppreference.net
Défini dans l'en-tête <charconv>
struct to_chars_result ;
(depuis C++17)

std::to_chars_result est le type de retour de std::to_chars . Il n'a pas de classes de base et ne possède que les membres suivants.

Table des matières

Membres de données

Nom du membre Définition
ptr
un pointeur de type char *
(objet membre public)
ec
un code d'erreur de type std::errc
(objet membre public)

Fonctions membres et amies

operator== (std::to_chars_result)

friend bool operator == ( const to_chars_result & ,
const to_chars_result & ) = default ;
(depuis C++20)

Compare les deux arguments en utilisant les comparaisons par défaut (qui utilise operator == pour comparer respectivement ptr et ec ).

Cette fonction n'est pas visible pour la recherche non qualifiée ou recherche qualifiée ordinaire, et ne peut être trouvée que par la recherche dépendante des arguments lorsque std::to_chars_result est une classe associée des arguments.

L'opérateur != est synthétisé à partir de operator== .

operator bool

constexpr explicit operator bool ( ) const noexcept ;
(depuis C++26)

Vérifie si la conversion a réussi. Retourne ec == std:: errc { } .

Notes

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>

Exemple

#include <array>
#include <charconv>
#include <iostream>
#include <string_view>
#include <system_error>
void show_to_chars(auto... format_args)
{
    std::array<char, 10> str;
#if __cpp_lib_to_chars >= 202306L and __cpp_structured_bindings >= 202406L
    // use C++26 structured bindings declaration as condition (P0963)
    // and C++26 to_chars_result::operator bool() for error checking (P2497)
    if (auto [ptr, ec] =
            std::to_chars(str.data(), str.data() + str.size(), format_args...))
        std::cout << std::string_view(str.data(), ptr) << '\n';
    else
        std::cout << std::make_error_code(ec).message() << '\n';
#elif __cpp_lib_to_chars >= 202306L
    // use C++26 to_chars_result::operator bool() for error checking (P2497)
    if (auto result =
            std::to_chars(str.data(), str.data() + str.size(), format_args...))
        std::cout << std::string_view(str.data(), result.ptr) << '\n';
    else
        std::cout << std::make_error_code(result.ec).message() << '\n';
#else
    // fallback to C++17 if-with-initializer and structured bindings
    if (auto [ptr, ec] =
            std::to_chars(str.data(), str.data() + str.size(), format_args...);
        ec == std::errc())
        std::cout << std::string_view(str.data(), ptr - str.data()) << '\n';
    else
        std::cout << std::make_error_code(ec).message() << '\n';
#endif
}
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

Voir aussi

(C++17)
convertit une valeur entière ou à virgule flottante en une séquence de caractères
(fonction)