C++ 参考手册
- C++11
- C++14
- C++17
- C++20
- C++ 编译器支持情况表
- 独立与宿主实现
- C++ 语言
- C++ 关键词
- 预处理器
- C++ 标准库头文件
- 具名要求
- 功能特性测试 (C++20)
- 工具库
- 类型支持(基本类型、RTTI、类型特性)
- 概念库 (C++20)
- 错误处理
- 动态内存管理
- 日期和时间工具
- 字符串库
- 容器库
- 迭代器库
- 范围库 (C++20)
- 算法库
- 数值库
- 输入/输出库
- 文件系统库
- 本地化库
- std::locale
- std::use_facet
- std::has_facet
- std::isspace(std::locale)
- std::isblank(std::locale)
- std::codecvt
- std::wstring_convert
- std::iscntrl(std::locale)
- std::isupper(std::locale)
- std::islower(std::locale)
- std::isalpha(std::locale)
- std::isdigit(std::locale)
- std::ispunct(std::locale)
- std::isxdigit(std::locale)
- std::isalnum(std::locale)
- std::isprint(std::locale)
- std::isgraph(std::locale)
- std::toupper(std::locale)
- std::tolower(std::locale)
- std::wbuffer_convert
- std::ctype_base
- std::codecvt_base
- std::messages_base
- std::time_base
- std::money_base
- std::ctype
- std::ctype<char>
- std::collate
- std::messages
- std::time_get
- std::time_put
- std::num_get
- std::num_put
- std::numpunct
- std::money_get
- std::money_put
- std::moneypunct
- std::ctype_byname
- std::codecvt_byname
- std::messages_byname
- std::collate_byname
- std::time_get_byname
- std::time_put_byname
- std::numpunct_byname
- std::moneypunct_byname
- std::codecvt_utf8
- std::codecvt_utf16
- std::codecvt_utf8_utf16
- std::codecvt_mode
- std::setlocale
- std::localeconv
- std::lconv
- LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME
- 注释
- 正则表达式库
- 原子操作库
- 线程支持库
- 实验性 C++ 特性
- 有用的资源
- 索引
- std 符号索引
- 协程支持 (C++20)
- C++ 关键词
std::locale
定义于头文件 <locale>
|
||
class locale; |
||
std::locale
类型对象是不可变平面的不可变索引集。 C++ 输入/输出库的每个流对象与一个 std::locale
对象关联,并用其平面分析及格式化所有数据。另外, locale 对象与每个 std::basic_regex 对象关联。 locale 对象亦可在标准容器和算法中用作进行字符串对照的谓词,而且能被直接访问,以获得或修改其所保有的平面。
C++ 程序中构造的每个 locale 至少保有下列标准平面,但程序可以定义额外特化,或全新的平面,并将它们添加到任何既存的 locale 对象。
受支持平面 | |
---|---|
std::collate<char> | std::collate<wchar_t> |
std::ctype<char> | std::ctype<wchar_t> |
std::codecvt<char,char,mbstate_t> std::codecvt<char16_t,char,mbstate_t> |
std::codecvt<char32_t,char,mbstate_t> std::codecvt<wchar_t,char,mbstate_t> |
std::moneypunct<char> std::moneypunct<char,true> |
std::moneypunct<wchar_t> std::moneypunct<wchar_t,true> |
std::money_get<char> | std::money_get<wchar_t> |
std::money_put<char> | std::money_put<wchar_t> |
std::numpunct<char> | std::numpunct<wchar_t> |
std::num_get<char> | std::num_get<wchar_t> |
std::num_put<char> | std::num_put<wchar_t> |
std::time_get<char> | std::time_get<wchar_t> |
std::time_put<char> | std::time_put<wchar_t> |
std::messages<char> | std::messages<wchar_t> |
在内部, locale 对象实现为如同它是一个指向(以 std::locale::id 索引的)的数组的引用计数指针,数组元素为指向平面的引用计数指针:复制 locale 只复制一个指针,并增加几个引用计数。为维护标准 C++ 库线程安全保证(不同对象上的操作始终为线程安全), locale 引用计数和每个平面的引用计数都以线程安全方式更新,类似 std::shared_ptr 。
成员类型
平面索引类型:每个平面类必须声明或继承此类型的公开静态成员 (类) | |
所有平面分类的分类:任何分类的每个 facet 都从此类型导出 (类) | |
category |
int (typedef) |
成员对象
none [静态] |
指示无平面类别的 category 类型零值 (公开静态成员常量) |
collate [静态] |
category 类型位掩码值 (公开静态成员常量) |
ctype [静态] |
category 类型位掩码值 (公开静态成员常量) |
monetary [静态] |
category 类型位掩码值 (公开静态成员常量) |
numeric [静态] |
category 类型位掩码值 (公开静态成员常量) |
time [静态] |
category 类型位掩码值 (公开静态成员常量) |
messages [静态] |
category 类型位掩码值 (公开静态成员常量) |
all [静态] |
collate | ctype | monetary | numeric | time | messages (公开静态成员常量) |
成员函数
构造新的 locale (公开成员函数) | |
析构 locale 和其引用计数变为零的平面 (公开成员函数) | |
替换 locale (公开成员函数) | |
以复制自另一 locale 的编译时鉴别的平面构造 locale (公开成员函数) | |
返回 locale 的名称,或若它无名则为 "*" (公开成员函数) | |
(C++20 中移除) |
locale 对象之间的相等性比较 (公开成员函数) |
用此 locale 的 collate 刻面以字典序比较两个字符串 (公开成员函数) | |
[静态] |
更改全局本地环境 (公开静态成员函数) |
[静态] |
获得到 "C" 本地环境的引用 (公开静态成员函数) |
示例
演示本地环境影响的程序(跨平台)的典型前文
运行此代码
#include <iostream> #include <locale> int main() { std::wcout << "User-preferred locale setting is " << std::locale("").name().c_str() << '\n'; // 在启动时,全局本地环境是 "C" 本地环境 std::wcout << 1000.01 << '\n'; // 以用户偏好的本地环境替换 C++ 本地环境和 C 本地环境 std::locale::global(std::locale("")); // 将来的宽字符输出使用新的全局本地环境 std::wcout.imbue(std::locale()); // 再次输出同一数字 std::wcout << 1000.01 << '\n'; }
可能的输出:
User-preferred locale setting is en_US.UTF8 1000.01 1,000.01
参阅
从本地环境获得一个刻面 (函数模板) | |
检查本地环境是否实现特定的刻面 (函数模板) | |
设置本地环境 ( std::ios_base 的公开成员函数) | |
返回当前本地环境 ( std::ios_base 的公开成员函数) |