std:: locale
|
定義済みヘッダー
<locale>
|
||
|
class
locale
;
|
||
std::locale
クラスのオブジェクトは、不変なファセットの不変なインデックス付き集合です。C++入出力ライブラリの各ストリームオブジェクトは
std::locale
オブジェクトに関連付けられ、そのファセットを使用して全てのデータのパースとフォーマットを行います。
さらに、ロケールオブジェクトは各
std::basic_regex
オブジェクトに関連付けられます。
(C++11以降)
ロケールオブジェクトは、標準コンテナとアルゴリズムで文字列照合を実行する述語として使用することもでき、保持するファセットを取得または変更するために直接アクセスすることもできます。
C++プログラムで構築される各ロケールは、少なくとも以下の標準ファセットを保持します(つまり、 std::has_facet はこれらのファセットタイプ全てに対して true を返します)。ただし、プログラムは追加の特殊化または完全に新しいファセットを定義し、既存のロケールオブジェクトに追加することができます。
| サポートされているファセット | |
|---|---|
|
std::
ctype
<
char
>
std:: ctype < wchar_t > |
std::
codecvt
<
char
,
char
,
std::
mbstate_t
>
std:: codecvt < wchar_t , char , std:: mbstate_t > |
|
std::
num_get
<
char
>
std:: num_get < wchar_t > |
std::
numpunct
<
char
>
std:: numpunct < wchar_t > |
|
std::
num_put
<
char
>
std:: num_put < wchar_t > |
|
|
std::
money_get
<
char
>
std:: money_get < wchar_t > |
std::
moneypunct
<
char
>
std:: moneypunct < char , true > std:: moneypunct < wchar_t > std:: moneypunct < wchar_t , true > |
|
std::
money_put
<
char
>
std:: money_put < wchar_t > |
|
|
std::
time_get
<
char
>
std:: time_get < wchar_t > |
std::
collate
<
char
>
std:: collate < wchar_t > |
|
std::
time_put
<
char
>
std:: time_put < wchar_t > |
std::
messages
<
char
>
std:: messages < wchar_t > |
| 非推奨ファセット | |
|
std::
codecvt
<
char16_t
,
char
,
std::
mbstate_t
>
(C++11以降)
(C++20で非推奨)
std:: codecvt < char32_t , char , std:: mbstate_t > (C++11以降) (C++20で非推奨) std:: codecvt < char16_t , char8_t, std:: mbstate_t > (C++20以降) (非推奨) std:: codecvt < char32_t , char8_t, std:: mbstate_t > (C++20以降) (非推奨) |
|
内部的には、ロケールオブジェクトは、参照カウント方式のポインタの配列( std::locale::id でインデックス付け)への参照カウント方式のポインタとして実装されています:ロケールをコピーする場合は、単一のポインタをコピーし、いくつかの参照カウントをインクリメントするだけです。標準C++ライブラリのスレッド安全性保証(異なるオブジェクトに対する操作は常にスレッドセーフ)を維持するために、ロケールの参照カウントと各ファセットの参照カウントは、 std::shared_ptr と同様に、スレッドセーフな方法で更新されます。
目次 |
メンバー型
| 型 | 説明 |
|
ファセットインデックス型:各ファセットクラスはこの型のpublic staticメンバを宣言または継承しなければならない
(クラス) |
|
|
全ファセットカテゴリの基底クラス:あらゆるカテゴリの各ファセットはこの型から派生する
(クラス) |
|
|
category
|
int
(typedef) |
メンバー定数
| 名前 | 説明 |
|
const
category
none
[static]
|
ファセットカテゴリがないことを示すゼロ値
(public static member constant) |
|
const
category
collate
[static]
|
照合ファセットカテゴリを示すビットマスク値
(public static member constant) |
|
const
category
ctype
[static]
|
ctypeファセットカテゴリを示すビットマスク値
(public static member constant) |
|
const
category
monetary
[static]
|
通貨ファセットカテゴリを示すビットマスク値
(public static member constant) |
|
const
category
numeric
[static]
|
数値ファセットカテゴリを示すビットマスク値
(public static member constant) |
|
const
category
time
[static]
|
時間ファセットカテゴリを示すビットマスク値
(public static member constant) |
|
const
category
messages
[static]
|
メッセージファセットカテゴリを示すビットマスク値
(public static member constant) |
|
const
category
all
[static]
|
collate
|
ctype
|
monetary
|
numeric
|
time
|
messages
(public static member constant) |
std::locale
のメンバ関数で
category
引数を期待するものは、上記で定義されたカテゴリ値、または2つ以上のそのような値の組み合わせを必要とします。
LC
定数
は受け入れられません。
メンバー関数
|
新しいロケールを構築する
(public member function) |
|
|
ロケールと参照カウントがゼロになるファセットを破棄する
(public member function) |
|
|
ロケールを置き換える
(public member function) |
|
|
別のロケールからコピーされたコンパイル時識別ファセットを持つロケールを構築する
(public member function) |
|
|
ロケールの名前を返す。名前がない場合は
"*"
を返す
(public member function) |
|
|
(C++26)
|
ロケールに関連付けられた文字エンコーディング方式を返す
(public member function) |
|
(removed in C++20)
|
ロケールオブジェクト間の等価比較
(public member function) |
|
このロケールの照合ファセットを使用して2つの文字列を辞書順に比較する
(public member function) |
|
|
[static]
|
グローバルロケールを変更する
(public static member function) |
|
[static]
|
"C"ロケールへの参照を取得する
(public static member function) |
例
ロケール対応プログラムの典型的なプロローグを実演します(クロスプラットフォーム)。
#include <iostream> #include <locale> int main() { std::wcout << L"User-preferred locale setting is " << std::locale("").name().c_str() << L'\n'; // on startup, the global locale is the "C" locale std::wcout << 1000.01 << L'\n'; // replace the C++ global locale and the "C" locale with the user-preferred locale std::locale::global(std::locale("")); // use the new global locale for future wide character output std::wcout.imbue(std::locale()); // output the same number again std::wcout << 1000.01 << L'\n'; }
出力例:
User-preferred locale setting is en_US.UTF8 1000.01 1,000.01
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 340 | C++98 | すべてのロケールが保持すべき標準ファセットのセットが不明確だった | 明確化された |
| LWG 347 | C++98 |
category
型のパラメータが
LC
定数を受け入れる可能性があった
|
受け入れられなくなった |
関連項目
|
(C++26)
|
IANA文字セットレジストリ
へのアクセスインターフェースを記述する
(クラス) |
|
ロケールからファセットを取得する
(関数テンプレート) |
|
|
ロケールが特定のファセットを実装しているかチェックする
(関数テンプレート) |
|
|
ロケールを設定する
(
std::ios_base
の公開メンバ関数)
|
|
|
現在のロケールを返す
(
std::ios_base
の公開メンバ関数)
|