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 函数引入数据竞争。

异常安全

强保证:如果抛出异常,则没有效果。

另见