文字列にプレフィックスを付ける C# の @ 記号に相当する C++ は何ですか? シンボルを自動的にエスケープするには?
例: var howManySlashesAreThereIn = @"\\\\\\"
;
あなたはC++の「生の文字列」機能を探していますが、それはかなり最近追加されたものです(C++ 11だと思います)。
std::string howManySlashesAreThereIn = R"(\\\\\\)";
これは C++11 標準で文書化されて2.14.5 String lieterals
いますが、その本はあなたにとって少し乾燥しているかもしれないので、Google で検索することをお勧めし"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";
より読みやすいものに変換します( 2番目のバリアントのスペースのためにまったく同じではありませんが、この場合追加されたスペースを無視するため、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++11raw
は、少なくともいくらか似ている文字列リテラルを追加します。
R"(This is a raw literal)";
これらは、次のような正規表現に特に役立ちます。
R"@(\w+\d*)@"
...これは、従来のリテラルとして次のようになります。
"\\w+\\d*"
違いはそれほど大きくありませんが、特に長い正規表現では違いが生じる可能性があります。