12.3.3  区域表示和混合区域表示

12.3.3 区域表示和混合区域表示

由于默认区域表示不能修改,因此要根据需要创建区域的表示对象。std::locale类提供了如下4种创建区域表示对象的方法:

图示

第一种根据全局区域表示创建一个locale对象。第二种根据localeCode指明的区域表示代码字符串来创建locale对象。第三种根据名为locale1的locale对象创建一个副本,并用locale2对象中cat指明的facet代替locale1的facet。第四种与第三种类似,不同之处在于它的第二个参数是区域表示代码字符串localeCode,指明facet的所属区域。区域表示代码详见表12-6。

12-6区域表示代码

图示

(续)

图示

例12-2给出了创建和使用区域表示的过程,目的是按英语、法语、德语的格式显示日期。此例的功能是:当程序调用仅有一个空字符串实参的locale构造函数时,返回的locale对象根据系统的用户设置被设置为本地区域表示。用户通常可以通过设置系统变量(LANG)来设置本地区域表示。

例12-2

图示

例12-2的执行结果为:

图示(https://www.daowen.com)

图示

在上述代码中,代码行“std::locale native("");”是值得仔细体会的。

通过把一个区域表示的facet修改成另一个区域表示的相应facet,可以创建混合区域表示。

例12-3

图示

例12-3的执行结果为:

图示

本例在调用locale类的构造函数时,新建的locale对象是法语区域表示,但该对象的时间facet被替换为美国版。导致该区域表示的日期具有美国英语格式,其他facet仍支持法语格式。LC_TIME是变量。区域表示的种类值见表12-7。

12-7 区域表示的种类值

图示

(续)

图示