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

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

14 голосов
/ 08 апреля 2010

Мне нужно сделать следующий код C # на C ++ (если это возможно). Я должен составить длинную строку с множеством чертовых цитат и прочего.

const String _literal = @"I can use "quotes" inside here";

Ответы [ 4 ]

35 голосов
/ 08 апреля 2010

Это недоступно в 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";
7 голосов
/ 08 апреля 2010

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

const char *_literal = "I can use \"quotes\" inside here";
5 голосов
/ 08 апреля 2010

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

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

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

R"C:\mypath"

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

2 голосов
/ 08 апреля 2010

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

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

irb(main):003:0> %Q{hello "world" and stuff     with    tabs}
=> "hello \"world\" and stuff\twith\ttabs"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...