无论如何都要做像PHP这样的事情
print << END
yadayadayada
END;
在C ++中? (多线,未转义,易于切割和粘贴的流插入)
答案 0 :(得分:26)
C ++ 11具有原始string literals:
// this doesn't have '\n', but '\\' and 'n'
R"(yada"yadayada\n)"
如果你需要那些parens,你也可以使用你想要的任何结束标记来做到这一点:
// the following will be "(yada)(yada)(yada)"
R"END((yada)(yada)(yada))END"
它也适用于嵌入式新行:
// the following will be "\n(yada)\n(yada)\n(yada)\n"
R"END(
(yada)
(yada)
(yada)
)END"
答案 1 :(得分:10)
这个答案现在已经过时了现代C ++ - 请参阅sbi's answer了解现代方式。
这是你能做的最好的事情:
std::cout <<
"This is a\n"
"multiline\n"
"string.\n";
不如正确的heredoc方便,但并不可怕。
答案 2 :(得分:8)
在C ++中,将大量数据放入源代码通常不会被视为代码风格,因此没有一种奇特的语言方式。
将文本放入外部文件(例如文本文件)通常更灵活,然后它不会绑定到已编译的可执行文件中。
如果您确实希望将文本绑定到可执行文件中(取决于您的平台),您通常可以使用某种形式的 resource 支持,或者使用带有'incbin'样式指令的汇编程序使用您想要的文本为数据区域命名。
或者,您可以使用外部实用程序(例如xxd -i
)从给定的输入文件编译命名的C样式数组。然后可以使用其余的源代码编译生成的文件。
答案 3 :(得分:4)
是。 http://en.cppreference.com/w/cpp/language/string_literal
const char* s1 = R"foo(
Hello
World
)foo";
//same as
const char* s2 = "\nHello\nWorld\n";
无论是否是最佳实践,C ++ 11都能完全满足您的需求。
答案 4 :(得分:1)
你可以这样做:
std::cout << "First line\n"
"second line\n"
"third line\n" ;
这是你用C ++做的最好的事情。
答案 5 :(得分:0)
C ++中没有HEREDOC这样的东西。
你可以做到
cout <<
"yadayadayada"
"yadayadayada"
<< endl;
这是你能得到的最好的。但你仍然必须逃脱像\,“,”这样的特殊字符。
将文本作为资源包含在可执行文件中或从外部文件加载文本的方式。
答案 6 :(得分:0)
行尾的斜杠表示下一行是字符串的延续。这会引导您使用替代语法,您可能不喜欢或不喜欢其他建议:
std::cout << "\
This is a\n\
multiline\n\
string.\
";
优点:你不必用引号括起每一行;从其他来源导入文本时,您只需要编辑每一行的一端,而不是两端(更友好的宏);并且您可以确切地看到结果字符串的外观,包括前导空格。
缺点:你仍然必须明确地包含\ n for换行符,并且我不喜欢失去使代码变得漂亮和漂亮的能力。 HEREDOC语法也受此功能的影响,所以也许这不会打扰你。
就个人而言,这不是我喜欢的语法。
答案 7 :(得分:-1)
如果我理解正确,我相信你想要这个:
#include <iostream>
...
std::cout << std::endl << "yadayadayada" << std::endl;