std::codecvt<InternT,ExternT,StateT>::encoding, do_encoding
From 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を返します。
[編集] 戻り値
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ロケールにおけるマルチバイト文字の最大バイト数 (マクロ変数) |
| [virtual] |
1つの InternT 文字に変換できる ExternT 文字の最大数を返します。(virtual protected member function) |