托管C ++中的Verbatim文字? (比如C#的@“blah”)

时间:2008-12-09 16:52:34

标签: .net c++ .net-2.0 string managed-c++

有没有办法在托管C ++中使用逐字字符串文字?类似于C#的

String Docs = @"c:\documents and settings\"

4 个答案:

答案 0 :(得分:9)

在C ++ 11中,有原始字符串文字:

cout<<R"((\"ddd\aa)\n)"<<endl;
cout<<R"delimiter((\"ddd\aa)\n)delimiter"<<endl;

输出是:

(\"ddd\aa)\n
(\"ddd\aa)\n

答案 1 :(得分:6)

目前无法实现。托管C ++字符串文字几乎与普通C ++字符串完全相同。托管C ++规范实际上只是ANSI C ++标准的增强。

目前在C ++中不支持C#样式文字语法(托管与否)。您必须手动转义每个角色。

有关更多详细信息,请参阅C ++ / CLI规范中的第9.1.3.3节。 (Spec Link)

答案 2 :(得分:4)

虽然不像'@'C#verbatim字符串文字那样简洁,但下面的编译/ Clr:pure,所以你可以使用C ++ Raw String Literals来实现纯MSIL和类似的结果:

String^ f = gcnew String(R"(C:\foo\bar.txt)");

原始字符串文字也可以在常规C ++中使用:

char *x = R"(C:\foo\bar.txt)";

Google“msdn C ++ String Literals”了解更多信息

答案 3 :(得分:0)

snip ..对于.NET编程,Visual Studio 2017中的Visual C ++支持使用/ clr(公共语言运行时编译)编译器选项来创建混合程序集。 / clr:pure和clr:safe选项在Visual Studio 2015中已弃用,而在Visual Studio 2017中不支持。如果您的代码需要安全或可验证,则建议将其移植到C#。