什么是原始字串?

时间:2019-06-21 20:26:21

标签: c++ c++11 rawstring

我在C ++ 17草案n4713中遇到了此代码段:

driver.findElement(By.xpath("//li[@name='Brand']//div[@id='w1-w1-w0-w0-multiselect[8]']//input[@id='w_1561136068937_cbx']")).click();

什么是“原始字符串”?它是做什么的?

3 个答案:

答案 0 :(得分:6)

原始字符串文字是旨在简化包含引号和反斜杠之类的嵌套字符的字符串文字,这些字符通常具有定界符和转义序列开始的含义。例如,它们可用于编码HTML之类的文本。例如,对比度

"<a href=\"file\">C:\\Program Files\\</a>"

是常规字符串文字,带有

R"(<a href="file">C:\Program Files\</a>)"

这是原始字符串文字。在这里,除引号外还使用括号可以使C ++区分嵌套引号和界定字符串本身的引号。

答案 1 :(得分:1)

基本上,raw string文字是不处理C ++的转义字符(例如\n \t\")的字符串。以R"(开头并以)"结尾的原始字符串文字,由C++11

引入
  

前缀(可选)R“定界符(raw_characters)定界符”

     

前缀-L,u8,u,U之一

感谢@Remy Lebeaudelimiter是可选的,通常被省略,但是在某些特殊情况下确实需要使用它,特别是如果字符串内容中包含字符序列)",例如:R"(...)"...)",那么您将需要使用定界符来避免错误,例如:R"x(...)"...)x"

查看示例:

#include <iostream>
#include <string> 
using namespace std;

int main()
{
    string normal_str="First line.\nSecond line.\nEnd of message.\n";
    string raw_str=R"(First line.\nSecond line.\nEnd of message.\n)";
    cout<<normal_str<<endl;
    cout<<raw_str<<endl;
    return 0;
}

输出:

  

第一行。

     

第二行。

     

消息结尾。

     

第一行。\ n第二行。\ n消息结尾。\ n

答案 2 :(得分:0)

  

原始字符串文字。用于避免转义任何字符。分隔符之间的所有内容都将成为字符串的一部分。前缀(如果存在)具有与上述相同的含义。

C ++参考:string literal

原始字符串的定义如下:

string raw_str=R"(First line.\nSecond line.\nEnd of message.\n)";

区别在于原始字符串会忽略(转义)所有特殊字符,例如\ n ant \ t,并像普通文本一样威胁它们。

因此,上面的那一行只是其中包含3个实际\ n的一行,而不是3个单独的行。

您需要删除定义行并在字符串周围添加括号以将其视为原始字符串。