C ++多行字符串文字
有没有办法在C ++中使用多行纯文本,常量字面值,在Perl中? 也许一些#include
文件的解析技巧? 我想不出一个,但男孩,那很好。 我知道它将在C ++ 0x。
那么...排序。 最简单的方法就是使用相邻字符串文字由编译器连接的事实:
const char *text =
"This text is pretty long, but will be "
"concatenated into just a single string. "
"The disadvantage is that you have to quote "
"each part, and newlines must be literal as "
"usual.";
缩进无关紧要,因为它不在引号内。
你也可以这样做,只要你注意逃避嵌入的换行符。 不这样做,就像我的第一个答案一样,不会编译:
const char *text2 = "Here, on the other hand, I've gone crazy and really let the literal span several lines, without bothering with quoting each line's content. This works, but you can't indent.";
再次注意每行结尾的反斜杠,它们必须在行结束前立即跳出,以避免源文件中的换行符,以便所有行为都像换行符不存在一样。 在你有反斜杠的位置你不会在字符串中出现换行符。 使用这种形式,显然不能缩进文本,因为缩进会成为字符串的一部分,并将其用随机空格加以混淆。
在C ++ 11中,你有原始字符串文字。 有点像这里 - shell和脚本语言(如Python,Perl和Ruby)中的文本。
const char * vogon_poem = R"V0G0N(
O freddled gruntbuggly thy micturations are to me
As plured gabbleblochits on a lurgid bee.
Groop, I implore thee my foonting turlingdromes.
And hooptiously drangle me with crinkly bindlewurdles,
Or I will rend thee in the gobberwarts with my blurlecruncheon, see if I don't.
(by Prostetnic Vogon Jeltz; see p. 56/57)
)V0G0N";
字符串中的所有空格和缩进以及换行符都将保留。
这些也可以是utf-8 | 16 | 32或wchar_t(使用通常的前缀)。
我应该指出,转义序列V0G0N在这里实际上并不需要。 它的存在将允许)“在弦内,换句话说,我可以放
"(by Prostetnic Vogon Jeltz; see p. 56/57)"
(注意多余的引号),上面的字符串仍然是正确的。 否则,我也可以使用它
const char * vogon_poem = R"( ... )";
引号内的父母仍然需要。
#define MULTILINE(...) #__VA_ARGS__
消耗括号内的所有内容。
用一个空格替换任意数量的连续空格字符。