《C++11标准库》3.1.6新式的字符串字面常量 Raw string(String Literal)

自C++11始,你可以定义 raw string(原始/未加工字符串) 和 multibyte /wide-character(多字节/宽字符)等字符串字面常量。

Raw String Literal

Raw string 允许我们定义字符序列,做法是:确切的写下其内容使其成为一个raw character sequence(原始字符序列)。于是你可以省下很多用来装饰特殊字符的escape符号。

Raw string 以 "R( 开头以 )" 结尾,可以内 line break(换行符)。例如一个用来表示”两个反斜线和一个n“的寻常字符常量可以定义如下:

"\\\\n"

也可定义为如下 raw string literal:

R"(\\n)"

如果要在 raw string内写出 )",可以使用 delimiter (定义符)。因此,一个 raw string 的完整语法是

Raw "delim(...)delim",其中 delim 是个字符序列,最多16个基本字符,不可含反斜线,空格,和小括号。

例如 如下raw string literal:

R"nc(a\
     b\nc()"
     )nc";

等同于寻常 string literal:

"a\\\n    b\\nc()\"\n   "

这样的 string 内含一个a,一个反斜线,一个新行字符,若干空格,一个b,一个反斜线,一个n,一个c,一对小括号,一个双引号,一个新行号,以及若干空格。

在定义正则表达式时,raw string literal 特别有用。

编码的(Encoded )String Literal

只要使用编码前缀,你就可以为string literal 定义一个特殊的字符编码。下面这些编码前缀都预先定义好了:

u8 定义一个UTF-8编码。UTF-8 string literal 以UTF-8编订的某个给定字符起头,字符类型为 const char。

u 定义一个 string literal,带着类型为 char16_t 的字符。

U 定义一个 string literal,带着类型为char32_t 的字符。

L 定义一个 wide string literal ,带着类型为 wchar_t 的字符。

例如:

L"HELLO"; //定义一个类型为 wchar_t 的string literal字符“HELLO”

Raw string 开头那个R前面还可以放置一个编码前缀。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值