public static member function
<locale>

std::locale::global

static locale global (const locale& loc);
設定全域性區域設定 [static]
全域性區域設定設定為 loc

呼叫後,使用預設建構函式構造的 locale 物件將返回 loc 的副本。

如果 loc 有名稱,則該函式還會設定 C 全域性區域設定(如同呼叫了 C 庫函式 setlocale 並使用 LC_ALL),從而影響C 庫的所有區域設定相關函式。
如果 loc 沒有名稱 ("*"),則對C 全域性區域設定的影響取決於庫實現。

請注意,此函式始終會將 C++ 全域性區域設定更改為 loc,而無論其名稱如何。因此,如果 loc 沒有名稱,它可能會導致C++ 全域性區域設定(被C 庫的區域設定相關函式使用的那個)與C++ 全域性區域設定(由預設構造的那個)不同。

是否存在針對整個程式的單個全域性區域設定,還是每個執行緒一個全域性區域設定,取決於庫實現。

引數

loc
要設定為全域性區域設定locale 物件。

返回值

先前的全域性區域設定物件。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// locale::global example
#include <iostream>       // std::cout
#include <locale>         // std::locale

int main (void) {
  std::locale foo;     // the "C" locale
  foo.global(std::locale(""));
  std::locale bar;     // the "" locale

  std::cout << "foo and bar are ";
  std::cout << (foo==bar?"the same":"different");
  std::cout << ".\n";

  return 0;
}

可能的輸出("" 區域設定可能是 "C" 區域設定,也可能不是)
foo and bar are the same.


資料競爭

在不維護每個執行緒全域性區域設定的庫實現中,此呼叫可能與併發呼叫同一函式時引入資料競爭。
此外,如果該函式內部使用了 setlocale,它還可能與併發呼叫 C 函式 setlocale 以及受其影響的任何 C 函式引入資料競爭。

異常安全

強保證:如果丟擲異常,則沒有效果。

另見