C++学习笔记
C++ Primer Plus 第三章 处理数据
三、wchar_t类型
为什么会出现wchar_t类型?
程序需要处理的字符集可能无法用一个8位的字节表示,如日文汉字系统。C++的处理方式有两种。一种是编译器厂商可以将char定义为一个16位的字节或更长的字节。另一种则是实现可以同时支持一个小型基本字符集和一个较大的扩展字符集。8位char可以表示基本字符集,另一种类型wchar_t(宽字符类型)可以表示扩展字符集。
wchar_t类型是一种整数类型,它有足够的空间,可以表示系统使用的最大扩展字符集。这种类型与另一种整型(底层【underlying]类型)的长度和符号属性相同。在进行国际编程或使用Unicode或IOS 10646会使用这种宽字符类型。
cin和cout将输入和输出看作是char流,因此不是于用来处理wchar_t类型。iostream头文件的最新版本提供了作用相似的工具——wcin和wcout,可用于处理wchar-t流。另外,可以通过加上前缀L来指示宽字符常量和宽字符串。
下面的代码将字母P的wchar-t的版本存储到变量bob中,并显示单词tall的wchar-t版本:
wchar_t bob = L'p'; // a wide-character constant
wcout << L"tall" << endl; // outputting a wide-character string
四、C++11新增的类型:char16_t和char32_t
随着编程人员日益熟悉Unicode,类型wchar_t显然不再能够满足需求。进行字符串编码时,如果有特定长度和符号特征的类型,将很有帮助,而类型wchar-t的长度和符号特征随实现而异。因此,C++11新增了类型char16_t和char32-t。
其中前者是无符号的,长16位,而后者也是无符号的,但长32位。C++11使用前缀u表示char16-t字符常量和字符串常量,如u'C'和u“be good";并使用前缀U表示char32-t常量,如U'R'和U"dirty rat".类型char16-t与\u00F6形式的通用字符名匹配,而类型char32-t与\U0000222B形式的通用字符名匹配。前缀u和U分别指出字符字面值的类型为char16_t和char32_t;
char16_t ch1 = u'q'; // basic character in 16-bit form
char32_t ch2 = U'\U0000222B'; //universal character name in 32-bit form
五、bool类型
bool类型可以表示真和假了,它们分别用预定义的字面值true和false表示。
bool is_ready = true
字面值true和false都可以通过提升转换为Int类型,true被转换为1,而false被转换为0:
int ans = true; //ans assigned true
int promise = false; //promise assigned 0
另外,任何数字值或指针值都可以被隐式转换(既不用显示强制转换)为bool值。任何非零值都被转换为true,而零被转换为false;
bool start = -100;// start assigned true
bool stop = 0; // stop assigned false