Spec-Zone.ru › C++

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

Определено в заголовке <locale>
(1)
public:
int max_length() const throw();
(до C++11)
public:
int max_length() const noexcept;
(с C++11)
(2)
protected:
virtual int do_max_length() const throw();
(до 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
[virtual]
возвращает количество символов ExternT, необходимых для получения одного символа InternT, если константа
(виртуальная защищённая член-функция)

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

Spec-Zone.ru

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