命名空间
变体
操作

std::codecvt<InternT,ExternT,StateT>::encoding, do_encoding

来自 cppreference.cn
< cpp‎ | locale‎ | codecvt
 
 
 
 
 
定义于头文件 <locale>
(1)
public:
int encoding() const throw();
(直到 C++11)
public:
int encoding() const noexcept;
(自 C++11 起)
(2)
protected:
virtual int do_encoding() const throw();
(直到 C++11)
protected:
virtual int do_encoding() const noexcept;
(自 C++11 起)
1) 公有成员函数,调用最派生类的成员函数 do_encoding
2) 如果由此 codecvt facet 表示的编码将每个内部字符映射到相同且恒定数量的外部字符,则返回该数量。如果编码是变长编码(例如 UTF-8 或 UTF-16),则返回 0。如果编码是状态相关的,则返回 -1

[编辑] 返回值

对应于一个 internT 字符的 externT 字符的确切数量(如果恒定)。 如果数量可变,则为 0;如果编码是状态相关的,则为 -1

非转换特化 std::codecvt<char, char, std::mbstate_t> 返回 1

[编辑] 示例

#include <iostream>
#include <locale>
 
int main()
{
    std::cout << "en_US.utf8 is a variable-length encoding, encoding() returns "
              << std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t>>(
                     std::locale("en_US.utf8")
                 ).encoding() << '\n';
 
    std::cout << "zh_CN.gb18030 is also variable-length, encoding() == "
              << std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t>>(
                     std::locale("zh_CN.gb18030")
                 ).encoding() << '\n';
 
    std::cout << "ru_RU.koi8r is a single-byte encoding, encoding() == "
              << std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t>>(
                     std::locale("ru_RU.koi8r")
                 ).encoding() << '\n';
}

输出

en_US.utf8 is a variable-length encoding, encoding() returns 0
zh_CN.gb18030 is also variable-length, encoding() == 0
ru_RU.koi8r is a single-byte encoding, encoding() == 1

[编辑] 参见

MB_CUR_MAX
当前 C 区域设置中多字节字符的最大字节数
(宏变量)[编辑]
[虚函数]
返回可以转换为单个 InternT 字符的 ExternT 字符的最大数量
(虚保护成员函数) [编辑]