std::codecvt<InternT,ExternT,StateT>:: length, do_length
|
Défini dans l'en-tête
<locale>
|
||
|
public
:
int
length
(
StateT
&
state,
const
ExternT
*
from,
const
ExternT
*
from_end,
|
(1) | |
|
protected
:
virtual
int
do_length
(
StateT
&
state,
const
ExternT
*
from,
const
ExternT
*
from_end,
|
(2) | |
do_length
de la classe la plus dérivée.
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) |