std::codecvt<InternT,ExternT,StateT>::encoding, do_encoding
来自 cppreference.com
定义在头文件 <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 方面表示的编码将每个内部字符映射到相同数量的外部字符,则返回该数量。如果编码是可变长度(例如 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 字符的最大数量(虚拟保护成员函数) |