Namespaces
Variants

std:: locale

From cppreference.net
定義済みヘッダー <locale>
class locale ;

std::locale クラスのオブジェクトは、不変なファセットの不変なインデックス付き集合です。C++入出力ライブラリの各ストリームオブジェクトは std::locale オブジェクトに関連付けられ、そのファセットを使用して全てのデータのパースとフォーマットを行います。 さらに、ロケールオブジェクトは各 std::basic_regex オブジェクトに関連付けられます。 (C++11以降) ロケールオブジェクトは、標準コンテナとアルゴリズムで文字列照合を実行する述語として使用することもでき、保持するファセットを取得または変更するために直接アクセスすることもできます。

C++プログラムで構築される各ロケールは、少なくとも以下の標準ファセットを保持します(つまり、 std::has_facet はこれらのファセットタイプ全てに対して true を返します)。ただし、プログラムは追加の特殊化または完全に新しいファセットを定義し、既存のロケールオブジェクトに追加することができます。

**注記**: このHTMLコードには翻訳すべき自然言語テキストが含まれていません。すべてのテキストはC++のコード、キーワード、型名、テンプレート構文であり、指定された翻訳ルールに従って翻訳対象外となっています。 このHTMLコードには翻訳すべき自然言語テキストが含まれていません。すべてがC++のテンプレートクラス名(`std::num_get`、`std::numpunct`)、型名(`char`、`wchar_t`)、HTMLタグ、およびCSSクラスで構成されています。 指示に従い: - HTMLタグと属性は保持 - C++固有の用語は翻訳せず - コード内のテキストは翻訳対象外 したがって、元のコードは変更せずにそのまま返します。 HTMLタグ、属性、コード内のテキストは翻訳せず、元のフォーマットを保持しました。C++固有の用語(std::num_put、char、wchar_tなど)は翻訳していません。 **注記**: このHTMLフラグメントには翻訳すべき自然言語テキストが含まれていません。すべての内容は以下のいずれかに該当します: - HTMLタグと属性 - C++コード(` `内) - C++固有の用語(`std::money_get`, `std::moneypunct`, `char`, `wchar_t`, `true`など) - テンプレート構文(`<`, `>`, `,`) したがって、元のフォーマットと内容をそのまま保持しています。 HTMLタグ、属性、コード内のテキストは翻訳せず、元のフォーマットを保持しました。C++固有の用語(std::money_put、char、wchar_tなど)は翻訳していません。 **翻訳結果の説明:** - HTMLタグ、属性、C++コード(`std::time_get`、`std::collate`、`char`、`wchar_t`など)はすべて原文のまま保持されています - テンプレート構文(` `、` `)も変更していません - 元のフォーマットと構造を完全に維持しています **注記:** このHTMLコードには翻訳すべき自然言語テキストが含まれていません。すべてのテキストは以下のいずれかに該当します: - HTMLタグおよび属性(翻訳対象外) - ` `タグ内のC++コード(`std::time_put`, `std::messages`, `char`, `wchar_t`など) - テンプレート構文(`<`, `>`) - クラス名やキーワード(`cpp`, `source-cpp`, `mw-geshi`など) したがって、元のHTML構造とC++コードは完全に保持されています。
サポートされているファセット
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 と同様に、スレッドセーフな方法で更新されます。

目次

翻訳内容: - 「Contents」→「目次」 - その他のC++関連用語(Member types、Member constants、Member functions、Example、Defect reports、See also)は原文のまま保持 - HTMLタグ、属性、数値はすべて変更なし - フォーマットと構造は完全に保持

メンバー型

説明
ファセットインデックス型:各ファセットクラスはこの型の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 定数を受け入れる可能性があった 受け入れられなくなった

関連項目

IANA文字セットレジストリ へのアクセスインターフェースを記述する
(クラス)
ロケールからファセットを取得する
(関数テンプレート)
ロケールが特定のファセットを実装しているかチェックする
(関数テンプレート)
ロケールを設定する
( std::ios_base の公開メンバ関数)
現在のロケールを返す
( std::ios_base の公開メンバ関数)