什么是 C# @ 符号前缀字符串的C++等效项

What is the C++ equivalent of the C# @ symbol prefixing strings?

本文关键字:C++ 字符串 前缀 符号 什么      更新时间:2023-10-16
C

# @ 符号前缀字符串的C++等效项是什么?用于自动转义符号?

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

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

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

这是它的 C++11 常见问题解答词,以及参考。

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

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

R"(This is a raw literal)";

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

R"@(w+d*)@"

。作为传统的文字,这将是:

"\w+\d*"

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