C++中其他形式的字符串字面值
本书前面说过,除 char类型外,C++还有类型 wchar t:而 C++11新增了类型 char16t和 char32 t。可创建这些类型的数组和这些类型的字符串字面值。对于这些类型的字符串字面值,C++分别使用前缀L、u和U表示,下面是一个如何使用这些前缀的例子:
wchart titlel]=L"Chief Astrogator";//w char string
charl6_t name[]= u"Felonia Ripova";//char 16 string
char32_t carl]=U"Humber Super Snipe";// char 32 string
C++11还支持 Unicode 字符编码方案 UTF-8。在这种方案中,根据编码的数字值,字符可能存储为 1~4个八位组。C++使用前缀u8来表示这种类型的字符串字面值。
C++11新增的另一种类型是原始(raw)字符串。在原始字符串中,字符表示的就是自己,例如,序列m不表示换行符,而表示两个常规字符–斜杠和 n,因此在屏幕上显示时,将显示这两个字符。另一个例子是,可在字符串中使用",而无需像程序清单 4.8 中那样使用繁琐的"。当然,既然可在字符串字面量包含",就不能再使用它来表示字符串的开头和末尾。因此,原始字符串将"(和)“用作定界符,并使用前缀R来标识原始字符串:
cout << R”(Jim “King” Tutt uses “\n” instead of endl.)“<< \n’;
上述代码将显示如下内容:
Jim “King” Tutt usesn instead of endl
如果使用标准字符串字面值,将需编写如下代码:
cout << “Jim"King” Tutt uses”\n" instead of endl." << ‘\n’;
在上述代码中,使用了\来显示,因为单个表示转义序列的第一个字符。
输入原始字符串时,按回车键不仅会移到下一行,还将在原始字符串中添加回车字符。如果要在原始字符串中包含)“,该如何办呢?编译器见到第一个)“时,会不会认为字符串到此结束?会的。但原始字符串语法允许您在表示字符串开头的"和(之间添加其他字符,这意味着表示字符串结尾的"和)之间也必须包含这些字符。因此,使用R”+(标识原始字符串的开头时,必须使用)+“标识原始字符串的结尾。因此,下面的语句:
cout << R”+(“(Who wouldn’t?)”,she whispered.)+” << endl;
将显示如下内容:
“(Who wouldn’t?)”,she whispered
总之,这使用"+(和)+“替代了默认定界符”(和)"。自定义定界符时,在默认定界符之间添加任意数量的基本字符,但空格、左括号、右括号、斜杠和控制字符(如制表符和换行符)除外。
可将前缀R与其他字符串前缀结合使用,以标识wchart等类型的原始字符串。可将R放在前面,也可将其放在后面,如Ru、UR等。
下面介绍另一种复合类型–结构。
对C++感兴趣的朋友点这里:C/C++课程