Spec-Zone.ru › C++

std::codecvt<InternT,ExternT,StateT>::max_length, do_max_length

Определено в заголовке <locale>
public:
int max_length() const throw();
(1) (до C++11)
public:
int max_length() const noexcept;
(начиная с C++11)
protected:
virtual int do_max_length() const throw();
(2) (до C++11)
protected:
virtual int do_max_length() const noexcept;
(начиная с C++11)
1) Открытая функция-член, вызывающая функцию-член do_max_length наиболее производного класса.
2) Возвращает максимальное значение, которое do_length(state, from, from_end, 1) может вернуть для любого допустимого диапазона [from, from_end) и любого допустимого state.

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

Максимальное количество символов ExternT, которые могут быть потреблены при преобразовании с помощью in() для получения одного символа InternT.

Специализация без преобразования std::codecvt<char, char, std::mbstate_t> возвращает 1.

Примечания

Если кодировка зависит от состояния (encoding() == -1), для получения одного внутреннего символа может потребоваться более max_length() внешних символов.

Пример

#include <codecvt>
#include <iostream>
#include <locale>

int main()
{
    std::cout << "In codecvt_utf8, the longest multibyte character is "
              << std::codecvt_utf8<wchar_t>().max_length() << " bytes long\n";

    std::cout << "In header-consuming codecvt_utf8, the longest multibyte character is "
              << std::codecvt_utf8<wchar_t,
                                   0x10ffff,
                                   std::consume_header>().max_length() << " bytes long\n";

    std::cout << "In this system's en_US.utf8, the longest multibyte character is "
              << std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t>>(
                     std::locale("en_US.utf8")
                 ).max_length() << " bytes long\n";

    std::cout << "In this system's zh_CN.gb18030, the longest multibyte character is "
              << std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t>>(
                     std::locale("zh_CN.gb18030")
                 ).max_length() << " bytes long\n";
}

Вывод:

In codecvt_utf8, the longest multibyte character is 4 bytes long
In header-consuming codecvt_utf8, the longest multibyte character is 7 bytes long
In this system's en_US.utf8, the longest multibyte character is 6 bytes long
In this system's zh_CN.gb18030, the longest multibyte character is 4 bytes long

См. также

MB_CUR_MAX
максимальное количество байтов в многобайтовом символе в текущей локали C
(макропеременная)
do_encoding
[виртуальная]
возвращает количество символов ExternT, необходимое для получения одного символа InternT, если оно постоянно
(виртуальная защищённая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/locale/codecvt/max_length

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API