8

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

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

4 回答 4

9

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

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

输出是:

(\"ddd\aa)\n
(\"ddd\aa)\n
于 2013-03-04T12:20:03.127 回答
6

目前这是不可能的。托管 C++ 字符串文字具有与普通 C++ 字符串几乎完全相同的规则。托管 C++ 规范实际上只是 ANSI C++ 标准的扩充。

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

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

于 2008-12-09T17:12:26.140 回答
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++ 字符串文字”了解更多信息

于 2014-10-09T17:55:37.497 回答
0

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

于 2019-09-20T17:57:33.253 回答