Строковые литералы C++?

Я должен сделать следующий код C# в C++ (если возможный). У меня есть к константе длинная строка с большим количеством долбаных кавычек и другого материала в нем.

const String _literal = @"I can use "quotes" inside here";
14
задан paxdiablo 8 April 2010 в 03:05
поделиться

4 ответа

В C ++ нет необработанных строковых литералов. Вам нужно будет экранировать строковые литералы.

std::string str = "I can use \"quotes\" inside here";

C ++ 0x предлагает необработанный строковый литерал, когда он доступен:

R"C:\mypath"

Кстати, вы не должны называть ничего с подчеркиванием в начале, поскольку такие идентификаторы зарезервированы в C ++.

5
ответ дан 1 December 2019 в 06:20
поделиться

Этого нет в 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";
35
ответ дан 1 December 2019 в 06:20
поделиться

В C ++ такого механизма нет. Вам придется сделать это по старинке, используя побеги.

Однако вы могли бы использовать язык сценариев, чтобы немного упростить экранирование. Например, оператор % Q в Ruby вернет правильно экранированную строку с двойными кавычками при использовании в irb :

irb(main):003:0> %Q{hello "world" and stuff     with    tabs}
=> "hello \"world\" and stuff\twith\ttabs"
2
ответ дан 1 December 2019 в 06:20
поделиться

В C ++ нет эквивалента C # "@". Единственный способ добиться этого - правильно экранировать строку:

const char *_literal = "I can use \"quotes\" inside here";
7
ответ дан 1 December 2019 в 06:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: