C++标准库中有几个标准基类方面,其默认行为依赖于经典的"C“区域设置(std::locale::classic())。这将使您有理由切换到派生类方面(也称为byname方面),如果您的程序需要特定于文化的功能,其行为取决于其构造时指定的区域设置。
例如,std::ctype提供了经典的"C“字符分类:
§22.4.1.3.3 静态掩码* classic_table() noexcept除外; 返回:指向大小为
table_size的数组的初始元素的指针,该数组表示"C“区域设置中字符的分类
这是否意味着std::ctype的行为在功能上与安装它的地区的行为不同?例如,假设我有一个日本地区:
std::locale loc("ja_JP");我想用一个面对日本字进行字符分类。字符分类是std::ctype的用途:
auto& f = std::use_facet<std::ctype<char>>(loc);f的ctype方法会根据日本的语言环境,还是经典的"C“语言来对字符进行分类?我的第一个猜测是基于上述标准引文的"C”语言环境,但实际上它是日本语言环境。我想知道为什么这个引用与这里发生的情况不一致。
以下是我的问题:
ctype执行"C“字符分类,而ctype实际上是根据使用它的地区进行分类的?发布于 2013-07-24 01:27:24
只有default-constructed std::ctype<char> facet使用classic_table进行分类。从系统提供的"ja_JP"获得的方面不是这方面的一个例子。
在讨论派生方面时,人们通常指的是从std::ctype等派生的用户定义的方面,而不是系统提供的byname方面。如果要重新定义某个字符类,可以使用派生的ctype方面,例如,处理逗号空白以解析逗号分隔的输入流,或停止将空格和制表符视为空白,逐行解析流。
https://stackoverflow.com/questions/17823693
复制相似问题