1

例如,为了复制/粘贴目的,写起来很方便:

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 样式的方法?

谢谢。

4

2 回答 2

3

C++(以及 C)自动连接相邻的字符串文字。不需要\使用字符串文字。例如这个

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

相当于

const char *p = "HelloWorld!";

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

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

结果将等同于您的原始版本\,即将生成一个连续的字符串文字。

但是,这不会在连接的段之间插入换行符或任何其他额外的空格。如果您需要类似的东西,您必须记住自己做。

于 2012-07-27T02:02:03.567 回答
1

我认为 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";
于 2012-07-27T02:30:30.147 回答