有没有办法在托管 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,因此您可以将 C++ Raw String Literals 用于纯 MSIL 和类似的结果:
String^ f = gcnew String(R"(C:\foo\bar.txt)");
原始字符串文字也可以在常规 C++ 中使用:
char *x = R"(C:\foo\bar.txt)";
谷歌“msdn C++ 字符串文字”了解更多信息
snip .. 对于 .NET 编程,Visual Studio 2017 中的 Visual C++ 支持使用 /clr(公共语言运行时编译)编译器选项创建混合程序集。/clr:pure 和 clr:safe 选项在 Visual Studio 2015 中已弃用,在 Visual Studio 2017 中不受支持。如果您的代码需要安全或可验证,那么我们建议您将其移植到 C#。