【发布时间】:2013-07-24 01:23:18
【问题描述】:
C++ 标准库中有一些标准基类方面,其默认行为取决于经典的“C”语言环境 (std::locale::classic())。如果您的程序需要特定于文化的功能,那么切换到派生类方面(又名byname 方面)是合理的,其行为取决于其构造时指定的语言环境。
例如std::ctype提供经典的“C”字符分类:
§22.4.1.3.3
static const mask* 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 实际上是根据使用的语言环境进行分类的? -
既然上面是真的,那么派生类的切面又是从哪里来的呢?当基类已经使用我想要的语言环境时,为什么还要使用派生类方面?
【问题讨论】: