名前空間
変種
操作

std::locale::locale

提供: cppreference.com
< cpp‎ | locale‎ | locale
 
 
 
 
ヘッダ <locale> で定義
(1)
locale() throw();
(C++11未満)
locale() noexcept;
(C++11以上)
(2)
locale( const locale& other ) throw();
(C++11未満)
locale( const locale& other ) noexcept;
(C++11以上)
explicit locale( const char* std_name );
(3)
explicit locale( const std::string& std_name );
(4) (C++11以上)
locale( const locale& other, const char* std_name, category cat );
(5)
locale( const locale& other, const std::string& std_name, category cat );
(6) (C++11以上)
template< class Facet >
locale( const locale& other, Facet* f );
(7)
locale( const locale& other, const locale& one, category cat );
(8)

新しいロケールオブジェクトを構築します。

1) デフォルトコンストラクタ。 グローバルな C++ のロケール (最も最近に std::locale::global への引数として使用されたロケール、または std::locale::global が行われていない場合は std::locale::classic のコピー) のコピーを構築します。
2) コピーコンストラクタ。 other のコピーを構築します。
3-4) 指定された std_name ("C"、 "POSIX"、 "en_US.UTF-8"、 "English_US.1251" など) を持つシステムロケールのコピーを構築します (そのようなロケールがオペレーティングシステムによってサポートされていれば)。 この方法で構築されたロケールは名前を持ちます。
5-6) other のコピーを構築します。 ただし、 cat 引数によって識別されるすべてのファセットについては、 std_name によって識別されるシステムロケールからコピーされます。 この方法で構築されたロケールは other が名前を持つ場合に限り名前を持ちます。
7) other のコピーを構築します。 ただし Facet 型 (一般的には引数の型から推定されます) のファセットについては引数 facet から導入されます。 facetNULL の場合、構築されたロケールは other の完全なコピーです。 この方法で構築されたロケールは名前を持ちません。
8) other のコピーを構築します。 ただし cat 引数によって識別されるすべてのファセットは one からコピーされます。 otherone がどちらも名前を持つ場合、結果のロケールも名前を持ちます。

目次

[編集] 引数

other - コピーする別のロケール
std_name - 使用するシステムロケールの名前
f - other とマージするファセットへのポインタ
cat - other とマージするファセットを識別するために使用されるロケールカテゴリ
one - ファセットの取得元の別のロケール

[編集] 例外

3,5) オペレーティングシステムが std_name という名前のロケールを持っていない場合、または std_nameNULL の場合、 std::runtime_error
4,6) オペレーティングシステムが std_name という名前のロケールを持っていない場合、 std::runtime_error
7,8) (なし)

[編集] ノート

オーバーロード 7 は一般的には new 式から直接取得した f を第2引数に指定して呼ばれます。 ロケールが自分のデストラクタから対応する delete を呼ぶ責任を持ちます。

[編集]

#include <iostream>
#include <locale>
#include <codecvt>
 
int main()
{
    std::locale l1;  // l1 は古典的な "C" ロケールのコピーです。
    std::locale l2("en_US.UTF-8"); // l2 は unicode ロケールです。
    std::locale l3(l1, l2, std::locale::ctype); // l3 は ctype 以外は "C" です (ctype は unicode です)。
    std::locale l4(l1, new std::codecvt_utf8<wchar_t>); // l4 は codecvt 以外は "C" です。
    std::cout << "Locale names:\nl1: " << l1.name() << "\nl2: " << l2.name()
               << "\nl3: " << l3.name() << "\nl4: " << l4.name() << '\n';
}

出力:

Locale names:
l1: C
l2: en_US.UTF-8
l3: LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=C;LC_COLLATE=C;LC_MONETARY=C;LC_MESSAGES=C;LC_PAPER=C;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C;LC_IDENTIFICATION=C
l4: *

[編集] 関連項目

ロケールおよび参照カウントがゼロになったファセットを破棄します
(パブリックメンバ関数) [edit]