什么是C#@符号前缀字符串的C ++等价物?

时间:2012-05-09 04:50:06

标签: c++ escaping

C#@符号前缀字符串的C ++等价物是什么?是否自动转义符号?

示例:var howManySlashesAreThereIn = @"\\\\\\";

4 个答案:

答案 0 :(得分:30)

在C ++ 11中,您可以使用原始字符串文字:

std::string s = R"(This\is\a\raw\string\literal)";

std::string s = R"*(This \one contains \a )", which would normally end the string)*";

以下是C++11 FAQ字样和reference

答案 1 :(得分:9)

你正在寻找C ++的“原始字符串”功能,但它是一个相当新的补充(C ++ 11,我相信)。

std::string howManySlashesAreThereIn = R"(\\\\\\)";

它在C ++ 11标准的2.14.5 String lieterals中有记录,虽然这对你来说可能有点干,所以我建议在"raw string" c++上搜索。

除了摆脱那些像"\\\\nasbox\\sharename\\downloads\\super_sekrit_stuff"这样的逃避倍增的怪物之外,它还允许你绕过“添加\n个字符并组合相邻的字符串”技巧,如转向:

htmlString =
    "<HTML>\n"
      "<HEAD>\n"
        "<TITLE>My page</TITLE>\n"
        "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=utf-8\">\n"
      "</HEAD>\n"
      "<BODY LINK=\"#0000ff\" VLINK=\"#800080\" BGCOLOR=\"#ffffff\">\n"
        "<P> </P>\n"
        "<PRE>\n";

更可读的东西(不是完全相同,因为第二个变种中的空格,但对HTML来说完全没问题,因为在这种情况下忽略了添加的空格):

htmlString = R"xyzzy(
    <HTML>
      <HEAD>
        <TITLE>My page</TITLE>
        <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
      </HEAD>
      <BODY LINK="#0000ff" VLINK="#800080" BGCOLOR="#ffffff">
        <P> </P>
        <PRE>
    )xyzzy";

答案 2 :(得分:4)

C ++ 11增加了raw字符串文字,至少有些相似。

R"(This is a raw literal)";

这些对正则表达式特别有用,例如:

R"@(\w+\d*)@"

......作为一个传统的文字将是:

"\\w+\\d*"

虽然差别不大,但它可以产生影响,特别是在较长的正则表达式中。

答案 3 :(得分:0)

Here是原始字符串文字(C ++ 11)的一个例子。

换行符和反斜杠逐字显示。