天天看点

c 追加字符串_C++11常用特性:06字符串字面量(原生字符串字面值)

c 追加字符串_C++11常用特性:06字符串字面量(原生字符串字面值)

说明:

1)字符串字面量始终要追加空字符('0'、L'0'、char16_t() 等)。

2)窄多字节字符串字面量和宽字符串字面量的编码是由编译器实现定义的

3)预处理器阶段会将相邻的字符串字面量拼接起来。即 "Hello," " world!" 生成(单个)字符串 "Hello, world!"。产生的字符串将拥有相同的编码前缀(或无前缀)

4)字符串字面量拥有静态存储期,程序生存期间存在于内存中。

5)字符串字面量可用于初始化字符数组。char str[] = "foo";,str含有字符串 "foo" 副本

6)试图修改字符串字面量导致未定义行为

7)C中字符串字面量的类型为char[],可直接赋值给(非 const)char*。C++11不再允许不带转型的这种赋值。

8)若字符串字面量有内嵌的空字符,表示含有多于一条字符串的数组。

const char* p = "abc0def"; // std::strlen(p) == 3 ,但数组大小为 8

9)若字符串字面量中一个合法十六进制数位跟随一个十六进制转译之后,则可能因非法转译序列而编译失败。字符串连接可用作替代方案:

//const char* p = "xfff"; // 错误:十六进制转义序列在范围外

constchar* p ="xff""f";// OK :此字面量是保有 {'xff','f','0'} 的 const char[3]

原生字符串字面值(raw string literal):

使用户书写的字符串“所见即所得”。C++11中原生字符串的声明,使用R"(和)"包裹该字符串字面量。类似python中string前加‘r’防止转义。

原生字符串字面值中的一切文字,包括预处理指令,都会被看成普通的文字。

特别要指出的是:

原始字符串字面量实际的定义为:前缀(可选) R"分隔符( 原始字符 )分隔符"

原始字符串必须用括号()括起来,括号的前后可以加其他字符串,所加的字符串会被忽略,并且加的字符串必须在括号两边同时出现。

c 追加字符串_C++11常用特性:06字符串字面量(原生字符串字面值)