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++ 全局区域设置(由默认构造的那个)不同。
是否存在针对整个程序的单个全局区域设置,还是每个线程一个全局区域设置,取决于库实现。
示例
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 函数引入数据竞争。