Я должен сделать следующий код C# в C++ (если возможный). У меня есть к константе длинная строка с большим количеством долбаных кавычек и другого материала в нем.
const String _literal = @"I can use "quotes" inside here";
В C ++ нет необработанных строковых литералов. Вам нужно будет экранировать строковые литералы.
std::string str = "I can use \"quotes\" inside here";
C ++ 0x предлагает необработанный строковый литерал, когда он доступен:
R"C:\mypath"
Кстати, вы не должны называть ничего с подчеркиванием в начале, поскольку такие идентификаторы зарезервированы в C ++.
Этого нет в C++03 (текущий стандарт).
Это часть проекта стандарта C++0x, но он пока недоступен.
Пока что вы просто должны цитировать его в явном виде:
const std::string _literal = "I have to escape my quotes in \"C++03\"";
Когда C++0x станет реальностью, вы сможете писать:
const std::string _literal = R"(but "C++0x" has raw string literals)";
и когда вам понадобится )"
в вашем литерале:
const std::string _literal = R"DELIM(more "(raw string)" fun)DELIM";
В C ++ такого механизма нет. Вам придется сделать это по старинке, используя побеги.
Однако вы могли бы использовать язык сценариев, чтобы немного упростить экранирование. Например, оператор % Q
в Ruby вернет правильно экранированную строку с двойными кавычками при использовании в irb
:
irb(main):003:0> %Q{hello "world" and stuff with tabs}
=> "hello \"world\" and stuff\twith\ttabs"
В C ++ нет эквивалента C # "@". Единственный способ добиться этого - правильно экранировать строку:
const char *_literal = "I can use \"quotes\" inside here";