Namespaces
Variants

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

From cppreference.net
Определено в заголовке <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) Открытая функция-член, вызывает функцию-член do_length наиболее производного класса.
2) Пытается преобразовать символы ExternT из массива символов, определённого [ from , from_end ) , с заданным начальным состоянием преобразования state , в не более чем max InternT символов, и возвращает количество символов ExternT , которые будут потреблены при таком преобразовании. Изменяет state как при выполнении do_in ( state, from, from_end, from, to, to + max, to ) для некоторого воображаемого выходного буфера [ to , to + max ) .

Содержание

Возвращаемое значение

Количество символов ExternT , которое было бы потреблено при преобразовании с помощью do_in() до тех пор, пока либо все from_end - from символы не будут потреблены, либо max InternT символов не будет произведено, либо не произойдет ошибка преобразования.

Неконвертирующая специализация std:: codecvt < char , char , std:: mbstate_t > возвращает std:: min ( max, from_end - from ) .

Пример

#include <iostream>
#include <locale>
#include <string>
int main()
{
    using facet_type = std::codecvt<wchar_t, char, std::mbstate_t>;
    // narrow multibyte encoding
    std::string s = "z\u00df\u6c34\U0001d10b"; // or u8"zß水𝄋"
              // or "\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 << "Only the first "
              << codecvt_facet.length(mb, s.data(), s.data() + s.size(), 2)
              << " bytes out of " << s.size() << " would be consumed"
                 " to produce the first 2 characters\n";
}

Вывод:

Only the first 3 bytes out of 10 would be consumed to produce the first 2 characters

Отчёты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение в опубликованной версии Корректное поведение
LWG 75 C++98 влияние на state не было указано указано
LWG 305 C++98 std::codecvt<wchar_t, char, std::mbstate_t>::do_length
требовалось возвращать std:: min ( max, from_end - from )
не требуется

Смотрите также

[virtual]
преобразует строку из ExternT в InternT , например, при чтении из файла
(виртуальная защищенная функция-член)