Дословные литералы в управляемом C ++? (как C #'s "бла") - PullRequest
8 голосов
/ 09 декабря 2008

Есть ли способ использовать дословные строковые литералы в управляемом C ++? Аналогично C #

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

Ответы [ 3 ]

9 голосов
/ 04 марта 2013

в C ++ 11, есть необработанный строковый литерал:

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

вывод:

(\"ddd\aa)\n
(\"ddd\aa)\n
6 голосов
/ 09 декабря 2008

В настоящее время это невозможно. Управляемые строковые литералы C ++ имеют почти те же правила, что и обычные строки C ++. Управляемая спецификация C ++ на самом деле является лишь дополнением стандарта ANSI C ++.

В настоящее время не поддерживается буквальный синтаксис в стиле C # в C ++ (управляемый или нет). Вы должны вручную экранировать каждого персонажа.

См. Раздел 9.1.3.3 в спецификации C ++ / CLI для получения более подробной информации. ( Spec Link)

4 голосов
/ 09 октября 2014

Хотя это и не так кратко, как дословный строковый литерал '@' 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" для получения дополнительной информации

...