2012-01-22 22 views
9

C++中有没有一种方法可以引用字符串而不必用反斜杠转义?例如,我想用一种方法在字符串中存储一些Latex代码,例如\documentclass{article}。我可以做C++中长字符串的Perl风格引号

string latex_code = "\\documentclass{article}" 

但是,这很烦人,当你有逃避很多东西,例如,如果你有大量的乳胶代码。在Perl中,我记得你有一些非常有用的引用工具。例如,请参阅此处的“q”和“qq”部分: http://www.perlmonks.org/?node_id=401006

C++中是否有类似的东西?我唯一能想到的另一件事是将Latex代码粘贴到外部文件中并将其读入。但是这似乎也很烦人。

回答

12

C++ 11有一个方法:

R"(The String Data \ Stuff ")" 
R"delimiter(The String Data \ Stuff ")delimiter" 

在第一种情况之间的 “(与)”,是字符串的一部分的一切。 “和\字符不需要转义;第二种情况下,”分隔符(开始字符串,只有当“分隔符”到达时才结束)字符串分隔符可以是任何长度最多16个字符的字符串,包括空字符串,该字符串不能包含空格,控制字符,'(',')'或'\'字符,使用此分隔符字符串可以让用户在原始字符串文字中使用“)”字符。例如,R “定界符((AZ))定界符” 等同于 “(AZ)”

http://en.wikipedia.org/wiki/C%2B%2B11

这是不可能在C++ 03。

4

的C++ 0x具有several new string literals。其中之一是原始字符串文字,它允许您为您的字符串使用不同的分隔符。原始字符串以R字符开头。一个基本的原始字符串文字将是R"(Hello, World!)"。这里"()"之间的所有内容都是字符串的一部分。

您还可以通过在"(之间插入一些字符串来指定不同的分隔符。例如,原始字符串R"delimiter(Hello, World!)delimiter"与上面的字符串相同,除了它使用"delimiter(作为分隔符。 delimiter部分最多可以包含16个字符,不能包含空格,(,)/个字符。

由于这是一个C++ 0x功能,它需要一个C++ 0x兼容编译器。从版本4.5开始,似乎gcc已支持此功能,clang已从3.0版开始支持。