2012-07-27 38 views
1

例如,用于复制/粘贴目的,它是非常方便的写:在C++中是否存在类似于C#@“Text”或Python“”“Text”“”的干净延续线?

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++中的\ style和C#或python风格?

谢谢。

+0

原始SQL文字总是一个坏主意。 – Puppy 2012-07-27 02:04:04

+0

可能的重复[有没有一种方法来分隔C++中的字符串,如PHP的Heredoc语法?](http://stackoverflow.com/questions/1348847/is-there-a-way-to-delimit-strings-in-c -like-phps-heredoc-syntax) – 2012-07-27 02:09:38

+0

通过我收到的答案和建议,以及对此的感谢! - 对于C++来说,模拟C#或python样式(如我所描述的)似乎是不可能的。 :-( – Tristan 2012-07-27 02:24:31

回答

1

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

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

在源中的每一新行应导致在执行字串文本换行。原始字符串文字通常采用R"(...)"的形式。对于海湾合作委员会这需要至少4.5版本和铿锵++,它需要版本3.0。或者,您可以使用自定义分隔符来更容易地消除字符串末尾的歧义:

const char *query = R"XXXX(SELECT * FROM ...... 
         WHERE X = (SELECT Y FROM .....) 
         AND M IN ('1','2','3'))XXXX"; 
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')" 

,结果将等同于原来的版本\,即一个连续字符串字面将被制作。

虽然这不会在连接的段之间插入换行符或其他任何其他的空格。如果你需要类似的东西,你必须记得亲自去做。

+0

谢谢安德烈,这里的问题(在这种情况下)是,我不能复制/粘贴的SQL命令,并马上执行它,我必须先删除中间引用这是我的问题的精神。 – Tristan 2012-07-27 02:08:04

+1

很难说这种方式比使用反斜杠更好:在最后,你必须添加两个字符,而不是一个额外的字符。但我想它确实算作一种不同的方法。 – dasblinkenlight 2012-07-27 02:09:47

+0

@dasblinkenlight:至少你不必确定反斜线是最后一个字符就行 - – eudoxos 2012-07-27 02:19:43

相关问题