C++:wchar_t 和C++新增类型:char16_t char32_t

wchar_t:wchar_t是初学C/C++的筒子们不经常用到的类型,首先说一下什么是wcha_t:wchar_t是C/C++的字符类型,是一种扩展的存储方式,主要用在国际化程序的实现中。


wchar_t 存在的原因:

char是八位字符类型,最多能包含256中字符,许多的外文字符集所包含的字符数目超过256个,char型不能表示。


wchar_t数据大小:

数据类型一般为16或者32位,不同的C/C++库有不同的规定。总之:wchar_t所能表示的字符远远多于char类型。


wchar_t的输入输出处理:

cin和cout将输入和输出看作是char流,因此不适合用于处理wchat类型,iostream头文件提供了wcin 和wcout用于处理输入输出流另外可以通过加上前缀L来只是宽字符常量和宽字符串


代码示例:

#include<iostream>
using namespace std;
locale loc("chs");
int main()
{
 wchar_t wStr[] = L"我使用了wcha_t类型";
 wcout.imbue(loc);
 wcout << wStr << endl;
 return 0;
}

关于此代码中的local,(系统区域设置,即国家或者地区设置),是用来决定当前所使用的当前语言编码,日期格式,数字格式,等有关的设置,

大家可以看下这篇博客就懂了,http://blog.csdn.net/haiross/article/details/45074355


char16_t和char32_t:

产生原因:随着编程人员日益的熟悉Unicode,,类型wchar_t显然已经满足不了需求,在计算机系统上进行的编码字符和字符串编码时,仅仅使用Unicode码点显然是不够的,

比如:如果在进行字符串编码时,如果有特定长度和符号特征的类型将很有帮助,而类型wchar_t的长度和符号特征随实现而已,因此C++11新增了类型char16_t,,char32_t。


char16_t:无符号类型,长16位,

char32_t无符号类型,长32位


C++11使用前缀u表示char16_t字符常量和字符串常量如:u‘L’;u“lilili”;

C++11使用前缀U表示char32_t字符常量和字符串常量如:U'L';U"lilili";


类型char16_t与/u00F6形式的通用字符名匹配,

类型char32_t与/U0000222B形式的通用字符名匹配。

前缀u和U分别指出字符字面值的类型为char16_t和char32_t。


如果你在VS中使用char16_t或者char32_t的话,不要加前缀u或者U只能加前缀L.

至于L还是u前缀的问题..属于厂商自定义.这个标准没有确定死的.毕竟这只是厂商实现的辅助字符转换的功能,而不是特定语法.
如果有疑问的话可以看这个:
http://zhidao.baidu.com/question/688079505010448284.html?qbl=relate_question_2&word=char16_t%BA%CDchar






你可能感兴趣的:(C++)