一、原始字面量解释+举例
对于原始字面量进行解释:字面量其实就是固定的值,而这个固定的值会分为两类
一类是数字类型:11,12.3等
一类是字符串类型:"Hello world" "How\t"等
在字符串类型中的 "How\t"有两种解释:
一种是五个字符“H”、"o"、"w"、"\"、"t"。
一种是四个字符“H”、"o"、"w"、"\t"(制表符\t)。
在这个过程中如果我们就想要按照原意,而不想让"\t"进行转义,我就想要原始的字符串,这个时候就可以用原始字面量进行修饰。
二、原始字面量的定义方式
在C++11中添加了定义原始字符串的字面量,定义方式为:R“xxx(原始字符串)xxx”其中()两边的字符串可以省略。原始字面量R可以直接表示字符串的实际含义,而不需要额外对字符串做转义或连接等操作。
比如:编程过程中,使用的字符串中常带有一些特殊字符,对于这些字符往往要做专门的处理,使用了原始字面量就可以轻松的解决这个问题了。
三、原始字面量的代码应用
打印路径:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str = "C:\hello\world\test.text";
cout << str << endl;
string str1 = "C:\\hello\\world\\test.text";
cout << str1 << endl;
string str2 = R"(C:\hello\world\test.text)";
cout << str2 << endl;
return 0;
}
在C:\hello\world\test.text中的\h和\w转义失败,对应的字符会原样输出,\t具有特殊含义:制表符,所以被转义也是占就四个字符(相当于一个Tab缩进)。
不使用原始字面量:
在C:\\hello\\world\\test.text中路径的间隔符为\但是这个字符又是转义字符,因此需要使用转义字符将其转义,最终才能得到一个没有特殊含义的普通字符\
使用原始字面量:
在R"(D:\hello\world\test.text)"使用了原始字面量R()中的内容就是描述路径的原始字符串,无需做任何处理
输出HTML标签:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str = "<html>\
<head>\
<title>\
C++11新特性\
</title>\
</head>\
<body>\
<p>\
原始字面量\
</p>\
</body>\
</html>";
cout << str << endl;
return 0;
}
在C++11之前如果一个字符串分别写到了不同的行里边,需要加连接符,这种方式不仅繁琐,还破坏了表达式的原始含义,如果使用原始字面量就变得简单很多,很强直观,可读性强。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str = R"(<html>
<head>
<title>
C++11新特性
</title>
</head>
<body>
<p>
原始字面量
</p>
</body>
</html>)";
cout << str << endl;
return 0;
}
最后强调一个细节:在R “xxx(raw string)xxx” 中,原始字符串必须用括号()括起来,括号的前后可以加其他字符串,所加的字符串会被忽略,并且加的字符串必须在括号两边同时出现,如果两边的字符串不一样会造成语法错误,编译不会通过。