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

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

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

Ответ 1

Это не доступно в С++ 03 (текущий стандарт).

Это часть стандартного черновика С++ 0x, но пока недоступного.

Теперь вам просто нужно процитировать его явно:

const std::string _literal = "I have to escape my quotes in \"C++03\"";

Как только С++ 0x станет реальностью, вы сможете написать:

const std::string _literal = R"(but "C++0x" has raw string literals)";

и когда вам нужно )" в вашем литеральном:

const std::string _literal = R"DELIM(more "(raw string)" fun)DELIM";

Ответ 2

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

const char *_literal = "I can use \"quotes\" inside here";

Ответ 3

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

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

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

R"C:\mypath"

Кстати, вы не должны называть что-либо с лидирующим подчеркиванием, поскольку такие идентификаторы зарезервированы на С++.

Ответ 4

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

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

irb(main):003:0> %Q{hello "world" and stuff     with    tabs}
=> "hello \"world\" and stuff\twith\ttabs"