作用:1. 对有两重性的字符串进行唯一化 得到你本身想要得到的字符串
语法:R" ( 你想得到的字符串 )"
#include<iostream>
using namespace std;
int main()
{
//1.
string a = "abc\n1";
cout<<a<<endl;
//输出为 abc
// 1
//而我们想要输出是 abc\n1 这个字符串
//2.
string b = " abc"1 " ;
cout<<b<<endl;
//编译错误 三个引号系统不知道如何处理
//而我们想要输出结果是 abc"1 却输出不了
}
系统会将 在字符串里的 \n \t 自动转化为换行符 制表符
所以容易产生二义性
string a = "abc\\n1";
//可以使用这个方法从而达到输出的结果
//但是也不是特别的简单
所以C++11推出了一个通用的方法 原始字面量 ,即只得到字符串内部的数据 而不进行任何的处理
int main()
{
string str = R"(abc\n1)";
string stg = R"(abc"1)";
string sto = R"(abc"\n1)";
cout<<str<<endl;
cout<<stg<<endl;
cout<<sto<<endl;
}
输出结果为:
abc\n1
abc"1
abc"\n1
轻松的得到了预期效果
作用2 :可以将多行的字符串进行初始化 (并且轻松将字符串多行输出)
int main()
{
string str = "<html>\
<head>\
<title>";
cout << str << endl;
}
输出结果:
<html> <head> <title>
需要 符号 \ 来控制 会导致代码可读性较差
而且 会导致一个问题:
我们想输出该字符串得到分行的结果时 这个方法会非常的低效(甚至无法实现)
int main()
{
string str = R"(<html>
<head>
<title>)";
cout << str << endl;
}
输出结果为:
<html>
<head>
<title>
该方法可以很高效的使一个字符串直接分行输出