📅  最后修改于: 2023-12-03 15:29:54.315000             🧑  作者: Mango
在C++11中,新加入了一种字符串类型:原始字符串字面量(Raw String Literals),它以R开头并用一对括号把字符串包围起来。相比于普通字符串,原始字符串在特殊字符的处理上有所不同,让我们来一起看看它的特点以及使用方法。
普通字符串中有一些特殊字符,如转义字符 \n(表示换行)、\t(制表符)等,它们是有特殊含义的,如果想要打印出这些特殊字符,就需要进行转义,比如:"Hello\nWorld!"。而原始字符串字面量则不需要转义这些特殊字符。
举个例子:
#include <iostream>
int main()
{
std::cout << "Hello\nWorld!";
std::cout << R"(Hello\nWorld!)";
return 0;
}
输出结果为:
Hello
World!Hello\nWorld!
可以看到,普通字符串中的 \n 被解释成了换行符,而原始字符串中的 \n 则被看作普通字符。这样,原始字符串能避免因为特殊字符引起的一些问题。
原始字符串字面量以 R 开头,并用一对括号将字符串内容包围起来。
R"delimiter(string content)delimiter"
其中的 delimiter(分隔符)可以是任意字符序列,只要它不出现在 string content 中即可。
可以用双引号(")做为 delimiter 的默认值,即 R"string content" 等价于 R"("string content")",如果 string content 中包含 ",则可以使用其他非空字符作为 delimiter。
下面是使用原始字符串的一些实例:
std::cout << R"("Hello World!")";
输出结果为:
"Hello World!"
在普通字符串中打印带引号的字符串需要使用转义字符:""Hello World!"",而在原始字符串中则直接输出即可。
std::cout << R"(Hello
World
!)";
输出结果为:
Hello
World
!
在普通字符串中打印这样的字符串需要使用多个换行符或者使用转义字符 \n,而在原始字符串中则直接在多行内输入内容即可。
std::cout << R"(C:\User\Documents\example.txt)";
输出结果为:
C:\User\Documents\example.txt
在普通字符串中打印这样的路径需要使用反斜杠转义字符 "\",而在原始字符串中则直接输入路径即可。
原始字符串字面量在字符串处理中具有很大的优势,能避免因特殊字符而引起的一些问题。它以 R 开头并用一对括号将字符串内容包围起来,delimiter 可以是任意字符序列。在实际应用中,我们可以根据需要使用原始字符串或普通字符串,使程序更加简洁明了。