22

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

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

4

3 回答 3

36

在 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 常见问题解答,以及参考.

于 2012-05-09T04:53:32.473 回答
9

您正在寻找 C++ 的“原始字符串”功能,但它是最近才添加的(我相信是 C++11)。

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

它记录在2.14.5 String lieteralsC++11 标准中,尽管这本书对你来说可能有点枯燥,所以我建议在"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";
于 2012-05-09T04:53:28.113 回答
4

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

R"(This is a raw literal)";

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

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

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

"\\w+\\d*"

尽管差异不是很大,但它可以有所作为,尤其是在较长的正则表达式中。

于 2012-05-09T04:54:25.537 回答