打印END << END; 在C++中?

Non*_*biz 11 c++ string-literals

反正有没有像PHP这样的东西

print << END
yadayadayada
END;
Run Code Online (Sandbox Code Playgroud)

在C++中?(多线,非转义,易于切割和粘贴的流插入)

sbi*_*sbi 28

C++ 11具有原始字符串文字:

// this doesn't have '\n', but '\\' and 'n'
R"(yada"yadayada\n)" 
Run Code Online (Sandbox Code Playgroud)

如果你需要那些parens,你也可以使用你想要的任何结束标记来做到这一点:

// the following will be "(yada)(yada)(yada)"
R"END((yada)(yada)(yada))END" 
Run Code Online (Sandbox Code Playgroud)

它也适用于嵌入式新行:

// the following will be "\n(yada)\n(yada)\n(yada)\n"
R"END(
(yada)
(yada)
(yada)
)END" 
Run Code Online (Sandbox Code Playgroud)

  • @Lanti:显而易见的答案是否定的,因为术语"文字"意味着该值被解释_literally_.但我怀疑你的问题可以通过实际说明你想做什么来改善. (2认同)

Ric*_*dle 11

这个答案现在已经过时了现代C++ - 请参阅sbi对现代方式的回答.

这是你能做的最好的事情:

std::cout <<
    "This is a\n"
    "multiline\n"
    "string.\n";
Run Code Online (Sandbox Code Playgroud)

不像正确的heredoc那么方便,但并不可怕.

  • 应该注意的是,这实际上并不是任何特殊的多行字符串语法.C和C++语言将在源代码中连接字符串文字,因此这与`std :: cout <<"相同.这是一个\nmultiline \nstring.\n";`在各方面(可读性除外). (8认同)

CB *_*ley 8

在C++中,将大量数据放入源代码通常不会被视为代码风格,因此没有一种奇特的语言方式.

将文本放入外部文件(例如文本文件)通常更灵活,然后它不会绑定到已编译的可执行文件中.

如果您确实希望将文本绑定到可执行文件中(取决于您的平台),您通常可以使用某种形式的资源支持,或者使用带有"incbin"样式指令的汇编程序为数据区域命名,文本为你要.

或者,您可以使用外部实用程序(例如xxd -i)从给定的输入文件编译命名的C样式数组.然后可以使用其余的源代码编译生成的文件.

  • "在C++中,将大量数据放入源代码通常不会被认为是代码风格,因此没有一种奇特的语言方式来实现它." 我不认为这就是为什么没有花哨的方法来做到这一点,但是对于`xxd`来说是+1 (2认同)

小智 5

是。 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";
Run Code Online (Sandbox Code Playgroud)

不管这是最佳实践,C ++ 11都能很好地满足您的要求。