如何删除多行原始字符串文字中的前导空格

问题描述 投票:0回答:1

使用多行时

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="">

我知道我可以将定义一直向左移动,但是当字符串文字位于类方法内或嵌套命名空间内时,它会破坏代码的缩进。

c++ string-literals
1个回答
0
投票

原始字符串文字始终尽可能“原始”,因为它将“准确地”保存源文件中存在的代码点,但有一个小例外,即源文件中的 \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" ;

另一种解决方案是将带有空格的字符串文字存储到 
std::string

中,然后在运行时删除空格。

    

© www.soinside.com 2019 - 2024. All rights reserved.