C++11 理解 (十八) 之 字串字面值
来源:互联网 发布:部落冲突升级数据 编辑:程序博客网 时间:2024/05/16 01:56
标准C++提供了两种字符串字面值。第一种,包含有双引号,产生以空字符结尾的const char数组。第二种有着前标L,产生以空字符结尾的const wchar_t数组,其中wchar_t代表宽字符。对于Unicode编码的支持尚付阙如。
为了加强C++编译器对Unicode的支持,类别char的定义被修改为其大小至少能够存储UTF-8的8位编码,并且能够容纳编译器的基本字符集的任何成员。
C++11 将支持三种Unicode编码方式:UTF-8,UTF-16,和UTF-32。除了上述char定义的变更, C++11将增加两种新的字符类别:char16_t和char32_t。它们各自被设计用来存储UTF-16 以及UTF-32的字符。
以下展示如何产生使用这些编码的字符串字面值:
u8"I'm a UTF-8 string."u"This is a UTF-16 string."U"This is a UTF-32 string."
第一个字符串的类别是通常的const char[]
;第二个字符串的类别是const char16_t[]
;第三个字符串的类别是const char32_t[]
。
当创建Unicode字符串字面值时,可以直接在字符串内插入Unicode codepoints。C++11提供了以下的语法:
u8"This is a Unicode Character: \u2018."u"This is a bigger Unicode Character: \u2018."U"This is a Unicode Character: \u2018."
在'\u'之后的是16个比特的十六进制数值;它不需要'0x'的前标。识别字'\u'代表了一个16位的Unicode codepoint;如果要输入32位的codepoint,使用'\U'和32个比特的十六进制数值。只有有效的Unicode codepoints能够被输入。举例而言,codepoints在范围U+D800—U+DFFF之间是被禁止的,它们被保留给UTF-16编码的surrogate pairs。
有时候避免手动将字符串换码也是很有用的,特别是在使用XML文件或是一些脚本语言的字面值的时候。 C++11将提供raw(未加工的)字符串字面值:
R"(The String Data \ Stuff " )"R"delimiter(The String Data \ Stuff " )delimiter"
在第一个例子中,任何包含在(
)
括号(标准已经从[]
改为()
)当中的都是字符串的一部分。其中"
和\
字符不需要经过跳脱(escaped)。在第二个例子中,"delimiter(
开始字符串,只有在遇到)delimiter"
才代表退出。其中delimiter
可以是任意的字符串,能够允许用户在未加工的字符串字面值中使用)
字符。 未加工的字符串字面值能够和宽字面值或是Unicode字面值结合:
u8R"XXX(I'm a "raw UTF-8" string.)XXX"uR"*@(This is a "raw UTF-16" string.)*@"UR"(This is a "raw UTF-32" string.)"
用户自定义的字面值:
标准C++提供了数种字面值。字符"12.5"是能够被编译器解释为数值12.5的double类别字面值。然而,加上"f"的后置,像是"12.5f",则会产生数值为12.5的float类别字面值。在C++规范中字面值的后置是固定的,而且C++代码并不允许创立新的字面后置。
C++11 开放用户定义新的字面修饰符(literal modifier),利用自定义的修饰符完成由字面值建构对象。
字面值转换可以区分为两个阶段:转换前与转换后 (raw 与 cooked)。 转换前的字面值指特定字符串行,而转换后的字面值则代表另一种类别。 如字面值1234,转换前的字面值代表 '1', '2', '3', '4' 的字符串行; 而转换后,字面值代表整数值1234。 另外,字面值0xA转换前是串行'0', 'x', 'A';转换后代表整数值 10。
- C++11 理解 (十八) 之 字串字面值
- C++Primer读书笔记之字面值常量
- [C++] 字面值的类型
- Objective-C语法之字面量语法
- 关于字面量的理解(Objective-C Literals)
- c++pri 2/22--字面值常量
- C语言中的常量和字面值
- c——内置类型字面值
- C/C++中的字面值常量
- C和C++中字串符(String)和字符串字面量(String Literal)的区别
- C和C++中字串符(String)和字符串字面量(String Literal)的区别
- 字面常量理解
- C++语言之字面值常量
- C++语言之字面值常量练习
- C语言之找出字符串中的字串
- Objective-C 基础之强大的字面量
- 字符串字面值、C风格字符串、C++风格字符串 一、字符串字面值
- C++11 理解 (二十八) 之 用于计算函数对象返回类型的统一方法
- 一步一步打造Geek风格的技术博客
- js 修改 a标签 href
- 广电行业展会有感
- The 2011 Nordic Collegiate Programming Contest October 01, 2011
- java读取OPENSSL生成的DSA的pem文件
- C++11 理解 (十八) 之 字串字面值
- Pomelo之application的start
- Linux Commands for Beginners--The top Command
- 对链表进行归并排序
- C/C++面试题汇总
- IE6去除iframe滚动条
- win7下apache2+php5.4+Mysql5.5+phpMyAdmin4.0.5的安装与配置
- Oracle高级功能
- 自定义Activity漂亮跳转效果