Дословные литералы в управляемом 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#.

Другие вопросы по тегам