c++11 标准模板(STL)(std::locale)(四)返回 locale 的名称

2024-03-14 09:44

本文主要是介绍c++11 标准模板(STL)(std::locale)(四)返回 locale 的名称,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用以封装文化差异的多态刻面的集合


std::locale 类型对象是不可变平面的不可变索引集。 C++ 输入/输出库的每个流对象与一个 std::locale 对象关联,并用其平面分析及格式化所有数据。另外, locale 对象与每个 std::basic_regex 对象关联。 locale 对象亦可在标准容器和算法中用作进行字符串对照的谓词,而且能被直接访问,以获得或修改其所保有的平面。

C++ 程序中构造的每个 locale 至少保有下列标准平面,但程序可以定义额外特化,或全新的平面,并将它们添加到任何既存的 locale 对象。

返回 locale 的名称,或若它无名则为 "*"

std::locale::name

std::string name() const;

返回操作系统所知的 locale 名称,例如 "POSIX" 或 "en_US.UTF8" 或 "English_United States.1252" 。若该 locale 不是系统提供的本地环境,则返回字符串 "*" 。

返回值

locale 的名称,或若无名则为 "*" 。

调用示例

#include <iostream>
#include <locale>
#include <codecvt>struct myfacet : std::locale::facet
{myfacet(std::size_t refs = 0) : facet(refs) {}static std::locale::id id;
};//类 std::locale::id 提供本地环境片面的实现限定标识。
std::locale::id myfacet::id;int main()
{std::locale locale1(std::locale(), new std::ctype<char>);std::cout << "The default locale is " << std::locale().name() << std::endl;std::cout << "The user's locale is " << std::locale("").name() << std::endl;std::cout << "A nameless locale is " << locale1.name() << std::endl;return 0;
}

输出

The default locale is C
The user's locale is Chinese (Simplified)_China.936
A nameless locale is *

locale 对象之间的相等性比较

std::locale::operator==, operator!=

测试二个本地环境的相等性。若具名 locale 的名称相等则认为它们相等。若无名 locale 互为彼此的副本则认为它们相等。

参数

other-要比较的 std::locale 对象

返回值

1) 若 other 为 *this 的副本或拥有等同名称则为 true ,否则为 false 。

2) 若 other 为 *this 的副本或拥有等同名称则为 false ,否则为 true 。

调用示例

#include <iostream>
#include <locale>
#include <codecvt>struct myfacet : std::locale::facet
{myfacet(std::size_t refs = 0) : facet(refs) {}static std::locale::id id;
};//类 std::locale::id 提供本地环境片面的实现限定标识。
std::locale::id myfacet::id;int main()
{std::cout << std::boolalpha;std::locale locale1;  // locale1 是经典 "C" 本地环境的副本std::cout << "locale1.name():   " << locale1.name() << std::endl;std::locale locale2("Chinese (Simplified)_China.936"); // locale2 为本地环境std::cout << "locale2.name():   " << locale2.name() << std::endl;std::locale locale3(locale1, locale2, std::locale::ctype); // locale3 为 "C" ,除了 ctype 为 unicodestd::cout << "locale3.name():   " << locale3.name() << std::endl;std::locale locale4(locale1, new std::codecvt_utf8<wchar_t>); // locale4 为 "C" ,除了 codecvtstd::cout << "locale4.name():   " << locale4.name() << std::endl;std::cout << locale2.name() << " == " << locale3.name() << "    "<< (locale2.name() == locale3.name()) << std::endl;std::cout << locale2.name() << " != " << locale3.name() << "    "<< (locale2.name() != locale3.name()) << std::endl;std::cout << locale2.name() << " == " << locale1.name() << "    "<< (locale2.name() == locale1.name()) << std::endl;std::cout << locale2.name() << " != " << locale1.name() << "    "<< (locale2.name() != locale1.name()) << std::endl;return 0;
}

输出

locale1.name():   C
locale2.name():   Chinese (Simplified)_China.936
locale3.name():   Chinese (Simplified)_China.936
locale4.name():   *
Chinese (Simplified)_China.936 == Chinese (Simplified)_China.936    true
Chinese (Simplified)_China.936 != Chinese (Simplified)_China.936    false
Chinese (Simplified)_China.936 == C    false
Chinese (Simplified)_China.936 != C    true

这篇关于c++11 标准模板(STL)(std::locale)(四)返回 locale 的名称的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/808009

相关文章

C#实现获得某个枚举的所有名称

《C#实现获得某个枚举的所有名称》这篇文章主要为大家详细介绍了C#如何实现获得某个枚举的所有名称,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... C#中获得某个枚举的所有名称using System;using System.Collections.Generic;usi

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

基于Java实现模板填充Word

《基于Java实现模板填充Word》这篇文章主要为大家详细介绍了如何用Java实现按产品经理提供的Word模板填充数据,并以word或pdf形式导出,有需要的小伙伴可以参考一下... Java实现按模板填充wor编程d本文讲解的需求是:我们需要把数据库中的某些数据按照 产品经理提供的 word模板,把数据

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

C++11的函数包装器std::function使用示例

《C++11的函数包装器std::function使用示例》C++11引入的std::function是最常用的函数包装器,它可以存储任何可调用对象并提供统一的调用接口,以下是关于函数包装器的详细讲解... 目录一、std::function 的基本用法1. 基本语法二、如何使用 std::function

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数