Namespaces
Variants

std::codecvt<InternT,ExternT,StateT>:: length, do_length

From cppreference.net
Défini dans l'en-tête <locale>
public :

int length ( StateT & state, const ExternT * from, const ExternT * from_end,

std:: size_t max ) const ;
(1)
protected :

virtual int do_length ( StateT & state, const ExternT * from, const ExternT * from_end,

std:: size_t max ) const ;
(2)
1) Fonction membre publique, appelle la fonction membre do_length de la classe la plus dérivée.
2) Tente de convertir les caractères ExternT du tableau de caractères défini par [ from , from_end ) , avec l'état de conversion initial state , en au plus max caractères InternT , et retourne le nombre de caractères ExternT que cette conversion consommerait. Modifie state comme s'il exécutait do_in ( state, from, from_end, from, to, to + max, to ) pour un tampon de sortie imaginaire [ to , to + max ) .

Table des matières

Valeur de retour

Le nombre de caractères ExternT qui seraient consommés s'ils étaient convertis par do_in() jusqu'à ce que tous les caractères from_end - from soient consommés ou que max caractères InternT soient produits, ou qu'une erreur de conversion se produise.

La spécialisation non-convertissante std:: codecvt < char , char , std:: mbstate_t > retourne std:: min ( max, from_end - from ) .

Exemple

#include <iostream>
#include <locale>
#include <string>
int main()
{
    using facet_type = std::codecvt<wchar_t, char, std::mbstate_t>;
    // encodage multioctet étroit
    std::string s = "z\u00df\u6c34\U0001d10b"; // ou u8"zß水𝄋"
              // ou "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b"
    std::locale loc("en_US.UTF-8");
    facet_type const& codecvt_facet = std::use_facet<facet_type>(loc);
    std::mbstate_t mb = std::mbstate_t();
    std::cout << "Seuls les premiers "
              << codecvt_facet.length(mb, s.data(), s.data() + s.size(), 2)
              << " octets sur " << s.size() << " seraient consommés"
                 " pour produire les 2 premiers caractères\n";
}

Sortie :

Seuls les premiers 3 octets sur 10 seraient consommés pour produire les 2 premiers caractères

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 Applicable à Comportement publié Comportement corrigé
LWG 75 C++98 l'effet sur state n'était pas spécifié spécifié
LWG 305 C++98 std::codecvt<wchar_t, char, std::mbstate_t>::do_length
devait retourner std:: min ( max, from_end - from )
non requis

Voir aussi

[virtual]
convertit une chaîne de ExternT vers InternT , comme lors de la lecture depuis un fichier
(fonction membre protégée virtuelle)