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 函式引入資料競爭。