C++中是否有类似于 C# @ "Text" 或 Python " " "Text" "" 的干净延续行?

Is there a clean continuation line in C++ similar to C# @"Text" or Python """Text"""?

本文关键字:Text 延续 Python 类似于 C++ 是否      更新时间:2023-10-16

例如,用于复制/粘贴,编写非常方便

C#

@"
SELECT * FROM ......
WHERE X = (SELECT Y FROM .....)
    AND M IN ('1','2','3')
";

Python:

"""
SELECT * FROM ......
WHERE X = (SELECT Y FROM .....)
    AND M IN ('1','2','3')
"""

比:

C++

"SELECT * FROM ...... 
WHERE X = (SELECT Y FROM .....) 
    AND M IN ('1','2','3')"

有什么方法可以避免C++中的\样式以及C#或python样式的方法吗?

谢谢。

C++(以及C)会自动连接相邻的字符串文字。不需要具有字符串文字的。例如,此

const char *p = "Hello" "World"   
  "!";

相当于

const char *p = "HelloWorld!";

在你的情况下,你可以简单地进行

"SELECT * FROM ...... "
"WHERE X = (SELECT Y FROM .....) "
"    AND M IN ('1','2','3')"

结果将与您使用的原始版本等效,即将生成一个连续的字符串文字。

不过,这不会在连接的段之间插入换行符或任何其他额外的空白。如果你需要这样的东西,你必须记得自己做。

我认为C++11允许在原始字符串文本中使用换行符,例如:

const char *query = R"(SELECT * FROM ...... 
                       WHERE X = (SELECT Y FROM .....) 
                       AND M IN ('1','2','3'))";

源中的每一个换行符都应该在执行字符串文字中产生一个换行。原始字符串文字通常采用R"( ... )"的形式。对于GCC,这至少需要4.5版本,而对于clang++,它需要3.0版本。或者,您可以使用自定义分隔符来更容易地消除字符串末尾的歧义:

const char *query = R"XXXX(SELECT * FROM ...... 
                       WHERE X = (SELECT Y FROM .....) 
                       AND M IN ('1','2','3'))XXXX";