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

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

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

978-7-111-51399-5-Chapter12-23.jpg

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

12-6区域表示代码

978-7-111-51399-5-Chapter12-24.jpg

(续)

978-7-111-51399-5-Chapter12-25.jpg

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

例12-2

978-7-111-51399-5-Chapter12-26.jpg

例12-2的执行结果为:

978-7-111-51399-5-Chapter12-27.jpg

978-7-111-51399-5-Chapter12-28.jpg

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

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

例12-3

978-7-111-51399-5-Chapter12-29.jpg

例12-3的执行结果为:

978-7-111-51399-5-Chapter12-30.jpg

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

12-7 区域表示的种类值

978-7-111-51399-5-Chapter12-31.jpg

(续)

978-7-111-51399-5-Chapter12-32.jpg