在托管C++中是否有使用原样字符串字面量的方法?类似于C#的
String Docs = @"c:\documents and settings\"
在托管C++中是否有使用原样字符串字面量的方法?类似于C#的
String Docs = @"c:\documents and settings\"
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++原始字符串字面量来生成纯MSIL并获得类似的结果:
String^ f = gcnew String(R"(C:\foo\bar.txt)");
原始字符串字面量在普通的C++中也可以使用:
char *x = R"(C:\foo\bar.txt)";
请搜索“msdn C++ 字符串字面值”获取更多信息。
剪辑..对于.NET编程,Visual Studio 2017中的Visual C++支持使用/clr(公共语言运行时编译器选项)创建混合程序集。/clr:pure和clr:safe选项在Visual Studio 2015中已被弃用,在Visual Studio 2017中不受支持。如果您的代码需要安全或可验证,则建议将其移植到C#。