面对需要多段字符输出结果的情况,C++11中的新特性:Raw String Literal
,可谓是造福人民。
示例
原理
旧的字符串字面量的语法对于带有特殊字符意义的字面量需要添加转义符 "\"
来表示。
如:
转义符 | 输出 |
---|---|
\n | 换行 |
\t | 水平制表 |
\v | 垂直制表 |
’ | 单引号字符 |
" | 双引号字符 |
因此面对一些比较繁琐的输出格式时,我们常常需要使用大量的转义符。
尤其是在正则表达式中。
想实现下面式子
\d{1}-\d{2}|\d{6}-\d{2}
我们需要写成
\\d{1}-\\d{2}|\\d{6}-\\d{2}
明显非常不方便,且可读性太差。
引入了Raw String Literal
之后,将不会对字符串内的转义符进行处理,进而达到所见即所得的效果。
字符串内的内容会如实输出到屏幕上。
示例
用法
就如上述示例中一样,基本用法就是将原来输出字符串 ""
替换成 R"()"
。
而后出现了一个问题就是,加入字符串内出现了 )"
,编译器不清楚哪一个才是真正的结束位置。
这时我们需要用到定界符(delimiter)。
Raw String Literal
的完整语法是 R"deli(...)deli"
。
注意注意注意!
其中 deli
并不是固定的!
其中 deli
并不是固定的!
其中 deli
并不是固定的!
那里其实是一个用户自定义的字符序列,最多16个基本字符,不可含反斜线,空格和小括号。
常用的deli是delimiter的缩写。
示例