Кавычки в стиле Perl для длинных строк в C ++ - PullRequest
9 голосов
/ 22 января 2012

Есть ли в C ++ способ заключить строку в кавычки без обратной косой черты?Например, я хотел бы сохранить некоторый латексный код в строке, такой как \documentclass{article}.Я мог бы сделать

string latex_code = "\\documentclass{article}"

Но это раздражает, когда вам приходится избегать многих вещей, например, если у вас много латексного кода.Я помню, что в Perl у вас есть несколько очень полезных инструментов цитирования.Смотрите, например, разделы "q" и "qq" здесь: http://www.perlmonks.org/?node_id=401006

Есть ли что-то подобное в C ++?Единственное, о чем я могу думать, это вставить латексный код во внешний файл и прочитать его. Но это также кажется раздражающим.

Ответы [ 2 ]

12 голосов
/ 22 января 2012

C ++ 11 имеет способ:

R"(The String Data \ Stuff " )"
R"delimiter(The String Data \ Stuff " )delimiter"

В первом случае все, что находится между "(и)", является частью строки.Символы "и \ не должны быть экранированы. Во втором случае достигается разделитель" (начинается строка, и он заканчивается только тогда, когда) ". Разделитель строки может быть любой строкой длиной до 16 символов,включая пустую строку. Эта строка не может содержать пробелы, управляющие символы, '(', ')' или символ '\'. Использование этой строки разделителя позволяет пользователю иметь символы ")" в необработанных строковых литералах.Например, R "разделитель ((az)) разделитель" эквивалентен "(az)"

http://en.wikipedia.org/wiki/C%2B%2B11

Это невозможно в C ++ 03.

4 голосов
/ 22 января 2012

C ++ 0x имеет несколько новых строковых литералов .Одним из них является необработанный строковый литерал, который позволяет вам использовать разные разделители для строк.Необработанные строки начинаются с символа R.Основной необработанный строковый литерал будет R"(Hello, World!)".Здесь все между "( и )" является частью строки.

Вы также можете указать различные разделители, поместив строку между символами " и (.Например, необработанная строка R"delimiter(Hello, World!)delimiter" - это та же строка, что и выше, за исключением того, что в качестве разделителя используется "delimiter(.Часть delimiter может содержать до 16 символов и не может содержать пробелы, (, ) или /.

Поскольку это функция C ++ 0x, для нее требуется C ++0x совместимый компилятор.Похоже, что gcc поддерживает эту функцию начиная с версии 4.5, а clang поддерживает версию 3.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...