最終更新日時:
が更新

履歴 編集

function
<locale>

std::locale::コンストラクタ

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) : グローバルlocaleglobal関数で設定される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が名前を持つときに限り名前を持つ。そうでない場合、otheroneの両方が名前を持つときに限り名前を持つ。

#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 Facet is a nullptr
    • C++23で、(7)のコンストラクタでfがヌルポインタの場合、構築されるlocaleotherと同じ名前を持つことが明確化された。あわせて、カテゴリを受け取るコンストラクタの引数名がcatからcatsに変更され、catsが有効なカテゴリ値であることが事前条件として追加された