2012-05-09 131 views
13

什麼是C#@符號前綴字符串的C++等價物?爲了自動轉義符號?什麼是C#@符號前綴字符串的C++等價物?

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

+1

他的意思是逐字字符串。 – Mehrdad

+0

可能重複的[字符串文字C++?](http://stackoverflow.com/questions/2597322/string-literals-c) – Mehrdad

+0

@Jake - 嘿!感謝澄清。 .Net術語是「逐字字符串文字」,其目的是使「\」不被視爲轉義字符:http://msdn.microsoft.com/en-us/library/aa691090%28v=vs 0.71%29.aspx。有在任何Java或C的當前版本,沒有等價++(沒有,我*不*考慮C++ 11「當前版本」;)) – paulsm4

回答

27

在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

8

您正在尋找C++的「原始字符串」功能,但它是一個相當新近的加法(我相信C++ 11)。

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

它記錄在C++ 11標準的2.14.5 String lieterals,儘管這大部頭可能是你有點幹,所以我建議在谷歌上搜索"raw string" c++起來。

除了擺脫那些逃避加倍像"\\\\nasbox\\sharename\\downloads\\super_sekrit_stuff" monstrosites的,它也允許你繞過「添加\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"; 
+0

這是舊的,但它應該是'R「(.. 。)「'在你的最後一個例子中,它可能不應該有一個反斜槓,因爲它是一個原始字符串。 – Rapptz

+0

書面的第一個版本不會有第二個版本顯示的縮進。如果您想縮進,您可以將舊式版本中的所有左引號移動到左側以累積空白區域。原始字符串更容易正確。 – emsr

4

C++ 11增加了raw至少有點類似的字符串文字。

R"(This is a raw literal)"; 

這些是正則表達式特別有用,比如:

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

...這將作爲一個傳統的文字是:

"\\w+\\d*" 

雖然差別不是很大,它可以有所作爲,特別是在較長的正則表達式中。

+0

分隔符「@」必須在引號內。 – user362515

+0

@ user362515:哎呀 - 令人驚訝的是,如果打字錯誤不能通過編譯器運行,它會如何生存將近4年? –

0

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

逐行顯示換行符和反斜槓。