Namespaces
Variants

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

From cppreference.net
ヘッダーで定義 <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]
単一の InternT 文字に変換可能な ExternT 文字の最大数を返す
(仮想保護メンバ関数)