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')"

結果は、を使用した元のバージョンと同等になります\。つまり、1つの連続した文字列リテラルが生成されます。

ただし、これにより、連結されたセグメント間に改行やその他の追加の空白は挿入されません。そのようなものが必要な場合は、自分で行うことを忘れないでください。

于 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 に答える