C ++中长字符串的Perl样式引号

时间:2012-01-22 04:45:46

标签: c++ perl latex

C ++中是否有引用字符串而不必使用反斜杠转义的方法?例如,我想要一种方法将一些Latex代码存储在一个字符串中,例如\documentclass{article}。我能做到

string latex_code = "\\documentclass{article}"

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

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

2 个答案:

答案 0 :(得分: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中不可能。

答案 1 :(得分:4)

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

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

由于这是C ++ 0x功能,因此需要兼容C ++ 0x的编译器。似乎gcc支持此功能,因为版本4.5和clang已经支持3.0版本。