Perl风格的引号用于C++中的长字符串

Perl-style quotes for long strings in C++

本文关键字:C++ 字符串 风格 Perl 用于      更新时间:2023-10-16

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版本开始支持。