locale() noexcept; // (1) C++98
locale(const locale& other) noexcept; // (2) C++98
explicit locale(const char* std_name); // (3) C++98
explicit locale(const string& std_name); // (4) C++98
locale(const locale& other,
const char* std_name, category cats); // (5) C++98
locale(const locale& other,
const string& std_name, category cats); // (6) C++98
template <class Facet>
locale(const locale& other, Facet* f); // (7) C++98
locale(const locale& other, const locale& one, category cats); // (8) C++98
概要
localeオブジェクトを構築する。
- (1) : デフォルトコンストラクタ。呼び出した時点でのグローバル
localeのコピーを構築する。 - (2) : コピーコンストラクタ。
- (3) : ロケール名
std_nameで識別されるロケールを構築する。 - (4) : ロケール名
std_nameで識別されるロケールを構築する。 - (5) :
catsで指定されたカテゴリのファセットをロケール名std_nameのロケールから、それ以外のファセットをotherから取得したロケールを構築する。 - (6) : (5)と同じく、
catsで指定されたカテゴリのファセットをロケール名std_nameのロケールから、それ以外のファセットをotherから取得したロケールを構築する。 - (7) :
otherのすべてのファセットに加えて、ファセットfを組み込んだロケールを構築する。 - (8) :
catsで指定されたカテゴリのファセットをoneから、それ以外のファセットをotherから取得したロケールを構築する。
事前条件
- (5), (6), (8) :
catsは、有効なカテゴリ値(categoryを構成する各ビットの論理和、もしくはnone)であること。
効果
- (1) : グローバル
locale(global関数で設定されるlocale)のコピーを構築する。 - (2) :
otherのコピーを構築する。 - (3) : ロケール名
std_nameで識別されるロケールを構築する。 - (4) :
locale(std_name.c_str())と等価。 - (5) :
otherのコピーを構築するが、catsで指定されたカテゴリに対応するファセットについては、locale(std_name)が保持するファセットで置き換える。 - (6) :
locale(other, std_name.c_str(), cats)と等価。 - (7) :
otherのコピーを構築する。fがヌルポインタでなければ、ファセットfを組み込む。 - (8) :
otherのコピーを構築するが、catsで指定されたカテゴリに対応するファセットについては、oneが保持するファセットで置き換える。
例外
- (3) :
std_nameが有効なロケール名でない場合、もしくはヌルポインタである場合、std::runtime_errorを送出する。 - (4) : (3)と同じ。
- (5) :
std_nameが有効なロケール名でない場合、もしくはヌルポインタである場合、std::runtime_errorを送出する。 - (6) : (5)と同じ。
備考
構築されるlocaleが名前を持つ(name関数が"*"以外を返す)かどうかは、以下のように定まる。
- (1), (2) : コピー元が名前を持つ場合に限り、名前を持つ。
- (3), (4) : 常に名前を持つ。
- (5), (6) :
otherが名前を持つ場合に限り、名前を持つ。 - (7) :
fがヌルポインタの場合、otherと同じ名前を持つ。fがヌルポインタでない場合、名前を持たない。 - (8) :
cats == locale::noneの場合、otherが名前を持つときに限り名前を持つ。そうでない場合、otherとoneの両方が名前を持つときに限り名前を持つ。
例
#include <iostream>
#include <locale>
int main()
{
// (3) ロケール名から構築("C"ロケール)
std::locale loc("C");
std::cout << loc.name() << std::endl;
// (7) 既存ロケールにヌルポインタを渡すと、otherと同じ名前を持つ
std::locale loc_null(loc, static_cast<std::ctype<char>*>(nullptr));
std::cout << loc_null.name() << std::endl;
// (7) 非ヌルのファセットを渡すと、名前を持たない
std::locale loc_facet(loc, new std::ctype<char>);
std::cout << loc_facet.name() << std::endl;
}
出力
C
C
*
バージョン
言語
- C++98
関連項目
参照
- LWG Issue 2295. Locale name when the provided
Facetis anullptr- C++23で、(7)のコンストラクタで
fがヌルポインタの場合、構築されるlocaleはotherと同じ名前を持つことが明確化された。あわせて、カテゴリを受け取るコンストラクタの引数名がcatからcatsに変更され、catsが有効なカテゴリ値であることが事前条件として追加された
- C++23で、(7)のコンストラクタで