12.3.3 区域表示和混合区域表示
2025年09月26日
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的执行结果为:
在上述代码中,代码行“std::locale native("");”是值得仔细体会的。
通过把一个区域表示的facet修改成另一个区域表示的相应facet,可以创建混合区域表示。
例12-3
例12-3的执行结果为:
本例在调用locale类的构造函数时,新建的locale对象是法语区域表示,但该对象的时间facet被替换为美国版。导致该区域表示的日期具有美国英语格式,其他facet仍支持法语格式。LC_TIME是变量。区域表示的种类值见表12-7。
表12-7 区域表示的种类值
(续)