C++ 11 开始增加了 UTF-16 和 UTF-32 字符串字面量,默认的字符串字面量是 UTF8,三种编码的写法如下:
// UTF-8
const char *utf8_string = "abc";
const char *utf8_string2 = u8"abc";
// UTF-16
const char16_t *utf16_string = u"abc";
// UTF-32
const char32_t *utf32_string = U"abc";
在字符字面量中,斜杠 \
是转义字符,需要写为 \\
的形式才能表示一个普通的斜杠,在写正则表达式的时候就特别不方便:
// \t[0-9]+\.[0-9]+\t\\SUB
const char *regex = "\\t[0-9]+\\.[0-9]+\\t\\\\SUB";
原始字符串字面量的作用就是禁用斜杆的转义功能,让斜杠在字符中只是一个普通的字符,使用原始字符串字面量之后,就不需要转义字符了:
// \t[0-9]+\.[0-9]+\t\\SUB
const char *regex = R"(\t[0-9]+\.[0-9]+\t\\SUB)";
原始字符串字面量的语法格式:R"PREFIX( )PREFIX"
,其中的 PREFIX
是分隔符。分割符是可选的,只写小括号也行。括号中间的内容包括空格、回车换行等都是字面量的一部分。
UTF-8,UTF-16 和 UTF-32 的原始字符串字面量写法:
// \t[0-9]+\.[0-9]+\t\\SUB
const char *regex = R"(\t[0-9]+\.[0-9]+\t\\SUB)";
// UTF8
const char *regex_utf8 = u8R"(\t[0-9]+\.[0-9]+\t\\SUB)";
// UTF-16
const char16_t *regex_utf16 = uR"(\t[0-9]+\.[0-9]+\t\\SUB)";
// UTF-32
const char32_t *regex_utf32 = UR"(\t[0-9]+\.[0-9]+\t\\SUB)";