使用多行时
raw string literals
,我们如何告诉编译器不要包含前导空格?
我有以下代码:
#include <string>
#include <print>
int main()
{
constexpr auto preamble =
R"(
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml">
<head>
<meta name="Author" content="Some One" />
<title>Title Of Page</title>
</head>
<body style="">
)";
std::println("{}", preamble);
return 0;
}
输出如下:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml">
<head>
<meta name="Author" content="Some One" />
<title>Title Of Page</title>
</head>
<body style="">
这似乎考虑到了前导空格,我正在寻找类似以下的内容:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml">
<head>
<meta name="Author" content="Some One" />
<title>Title Of Page</title>
</head>
<body style="">
我知道我可以将定义一直向左移动,但是当字符串文字位于类方法内或嵌套命名空间内时,它会破坏代码的缩进。
原始字符串文字始终尽可能“原始”,因为它将“准确地”保存源文件中存在的代码点,但有一个小例外,即源文件中的 \r
和
\r\n
被替换由\n
。如果您确实想要源代码中的空格,而不是文字,则不能让文字跨越空格。
避免这种情况的一种方法是将每一行放在自己的文字中,手动添加换行符:
constexpr auto preamble =
R"(<?xml version="1.0" encoding="iso-8859-1"?>)" "\n"
R"(<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">)")" "\n"
R"(<html xmlns="https://www.w3.org/1999/xhtml">)" "\n"
R"(<head>)" "\n"
R"( <meta name="Author" content="Some One" />)" "\n"
R"( <title>Title Of Page</title>)" "\n"
R"(</head>)" "\n"
R"(<body style="">)" "\n"
;