C++ 11 中的原始字符串字面量(Raw String Literal)

Oct 09, 2022 • 预计阅读时间 1 分钟

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)";

参考资料

https://en.wikipedia.org/wiki/C%2B%2B11#New_string_literals

C++
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

Swift 在调用 super.init 之前必须初始化变量

Swift 5 ABI 和 Module 的稳定性