Managed C++中的逐字字符串(类似于C#的@"blah")是什么?

8

在托管C++中是否有使用原样字符串字面量的方法?类似于C#的

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

9
在C++11中,有原始字符串字面量:
cout<<R"((\"ddd\aa)\n)"<<endl;
cout<<R"delimiter((\"ddd\aa)\n)delimiter"<<endl;

输出结果为:

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

6

目前这是不可能的。托管C++字符串字面量几乎与普通C++字符串具有完全相同的规则。事实上,托管C++规范只是ANSI C++标准的一个增强。

目前在C++(托管或非托管)中没有支持C#风格的字面量语法。您必须手动转义每个字符。

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


1
当这个答案被提出时,它比现在更正确。 - RichardPlunkett
@RichardPlunkett 鉴于目前情况的反思,我们是否应该编辑或删除此帖子? - John Leidegren
原始字符串字面量可用于实现所需的结果:String^ f = gcnew String(R"(C:\foo\bar.txt)"); [请参阅Google msdn C++字符串字面量以获取更多信息] - Cameron

3

虽然不像C#的'@'字面量字符串那样简洁,但以下代码可以编译/Clr:pure,所以您可以使用C++原始字符串字面量来生成纯MSIL并获得类似的结果:

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

原始字符串字面量在普通的C++中也可以使用:

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

请搜索“msdn C++ 字符串字面值”获取更多信息。


哦!太好了!!非常感谢。 - Cluster

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接