マネージ C++ でそのままの文字列リテラルを使用する方法はありますか? C#に似ている
String Docs = @"c:\documents and settings\"
マネージ C++ でそのままの文字列リテラルを使用する方法はありますか? C#に似ている
String Docs = @"c:\documents and settings\"
C++11 には、生の文字列リテラルがあります。
cout<<R"((\"ddd\aa)\n)"<<endl;
cout<<R"delimiter((\"ddd\aa)\n)delimiter"<<endl;
出力は次のとおりです。
(\"ddd\aa)\n
(\"ddd\aa)\n
これは現在不可能です。マネージ C++ 文字列リテラルには、通常の C++ 文字列とほぼ同じ規則があります。マネージ C++ 仕様は、実際には ANSI C++ 標準の拡張にすぎません。
現在、C++ では C# スタイルのリテラル構文はサポートされていません (マネージかどうかに関係なく)。すべての文字を手動でエスケープする必要があります。
詳細については、C++/CLI 仕様のセクション 9.1.3.3 を参照してください。(仕様リンク)
'@' C# 逐語的な文字列リテラルほど簡潔ではありませんが、次のコードは /Clr:pure をコンパイルするため、純粋な MSIL に C++ Raw 文字列リテラルを使用して同様の結果を得ることができます。
String^ f = gcnew String(R"(C:\foo\bar.txt)");
生の文字列リテラルは、通常の C++ でも使用できます。
char *x = R"(C:\foo\bar.txt)";
詳細については、Google の「msdn C++ 文字列リテラル」を参照してください。