Дословные литералы в управляемом C++? (как в C#'s "бла")
Есть ли способ использовать дословные строковые литералы в управляемом C++? Аналогично C#
String Docs = @"c:\documents and settings\"
3 ответа
В 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++ (управляемый или нет). Вы должны вручную экранировать каждого персонажа.
См. Раздел 9.1.3.3 в спецификации C++/CLI для более подробной информации. ( Spec Ссылка)
Хотя это и не так кратко, как дословный строковый литерал '@' C#, следующий код компилирует /Clr:pure, поэтому вы можете использовать необработанные строковые литералы C++ для чистого MSIL и аналогичный результат:
String^ f = gcnew String(R"(C:\foo\bar.txt)");
Необработанные строковые литералы также могут использоваться в обычном C++:
char *x = R"(C:\foo\bar.txt)";
Google "msdn C++ String Literals" для получения дополнительной информации
Snip .. Для программирования.NET Visual C++ в Visual Studio 2017 поддерживает создание смешанных сборок с помощью параметра компилятора /clr (компиляция среды CLR). Параметры /clr:pure и clr:safe устарели в Visual Studio 2015 и не поддерживаются в Visual Studio 2017. Если ваш код должен быть безопасным или поддающимся проверке, мы рекомендуем вам перенести его на C#.