Perl风格的引号用于C++中的长字符串
Perl-style quotes for long strings in C++
C++中有没有一种方法可以在不必用反斜杠转义的情况下引用字符串?例如,我想要一种将Latex代码存储在字符串中的方法,例如documentclass{article}
。我可以做
string latex_code = "\documentclass{article}"
但当你不得不逃避很多事情时,这会变得很烦人,例如,如果你有很多Latex代码。在Perl中,我记得您有一些非常有用的引用工具。例如,请参阅此处的"q"answers"qq"部分:http://www.perlmonks.org/?node_id=401006
C++中有类似的东西吗?我唯一能想到的就是将Latex代码粘贴到一个外部文件中并读取。但这似乎也很烦人。
C++11有一种方法:
R"(The String Data Stuff " )"
R"delimiter(The String Data Stuff " )delimiter"
在第一种情况下,"(和)"之间的所有内容都是字符串的一部分。"和\字符不需要转义。在第二种情况下,达到"分隔符(开始字符串,仅在结束时结束)"分隔符。字符串分隔符可以是长度不超过16个字符的任何字符串,包括空字符串。此字符串不能包含空格、控制字符、"(",")"或"\"字符。使用此分隔符字符串可以使用")"原始字符串文字中的字符。例如,R"delimiter((a-z))delimiter"等效于"(a-z)"
http://en.wikipedia.org/wiki/C%2B%2B11
这在C++03中是不可能的。
C++0x有几个新的字符串文字。其中之一是原始字符串文字,它允许您为字符串使用不同的分隔符。原始字符串以R
字符开头。一个基本的原始字符串文字应该是R"(Hello, World!)"
。这里,"(
和)"
之间的所有内容都是字符串的一部分。
您还可以通过在"
和(
字符之间放置一些字符串来指定不同的分隔符。例如,原始字符串R"delimiter(Hello, World!)delimiter"
与上面的字符串相同,只是它使用"delimiter(
作为分隔符。delimiter
部分最多可以是16个字符,并且不能包含空格、(
、)
或/
字符。
由于这是一个C++0x功能,因此需要一个与C++0x兼容的编译器。似乎gcc从4.5版本开始就支持这个功能,clang从3.0版本开始支持。