【问题标题】:What is the C++ equivalent of the C# @ symbol prefixing strings?C# @ 符号前缀字符串的 C++ 等价物是什么?
【发布时间】:2012-05-17 14:37:59
【问题描述】:

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

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

【问题讨论】:

标签: c++ escaping


【解决方案1】:

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

R"(This is a raw literal)";

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

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

...作为传统文字,这将是:

"\\w+\\d*"

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

【讨论】:

  • 分隔符@ 必须在引号内。
  • @user362515:糟糕——一个错别字在没有通过编译器的情况下还能存活近 4 年……
【解决方案2】:

在 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

【讨论】:

    【解决方案3】:

    您正在寻找 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";
    

    【讨论】:

    • 这是旧的,但在上一个示例中它应该是 R"( ... )",它可能不应该有反斜杠,因为它是一个原始字符串。
    • 所写的第一个版本没有第二个版本显示的缩进。如果您想要缩进,您可以将老式版本中的所有左引号向左移动以累积空白。原始字符串更容易正确处理。
    猜你喜欢
    • 2020-06-03
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 2011-08-26
    • 2017-04-06
    相关资源
    最近更新 更多