Что значит u8R «delim (SomeTextInHere) delim» в C ++? - PullRequest
2 голосов
/ 04 ноября 2011

Да, вот что я не видел раньше.Следующий фрагмент кода был найден в дикой природе (хотя я перефразирую, так как у меня нет доступа к оригиналу):

char str[] = u8R"delim(SomeTextInHere)delim";

Может кто-нибудь на самом деле сказать мне, что это значит и что эквивалентнобыть в C?

Ответы [ 2 ]

5 голосов
/ 04 ноября 2011

Я не знаю, как перевести его на C сэр, но это приводит к тому, что почти все новые связанные с литералами вещи в одном примере.

u8: utf-8 string literal.
R: Raw string literal (no escape characters)
"delim(" ... ")delim": The prefix and suffix of the raw string literals. 
                       They are used as delimiters, and you can write your own.
2 голосов
/ 04 ноября 2011

В C еще нет эквивалента.Это функция C ++ 11, которая объединяет две вещи.

Префикс u8 означает, что строка будет закодирована в UTF-8.Префикс R означает, что это необработанный строковый литерал.Объединение их означает, что необработанная строка будет закодирована в UTF-8.

Необработанные строки - это способ обойти все экранирование, необходимые для регулярных выражений и так далее.Обычно в регулярном выражении вы должны использовать много символов "\".Но это экранирующий символ C / C ++, поэтому в строковых литералах вместо него нужно использовать «\».Необработанные строковые литералы позволяют вам избежать этого.В необработанных строках нет escape-символов.

Способ работы необработанного строкового литерала заключается в следующем.За префиксом R следует, как обычно, ".Но символы вплоть до первого ( символа все считаются частью разделителя необработанной строки.Таким образом, если вы начнете необработанную строку с R"foo(, строка будет продолжаться до тех пор, пока синтаксический анализатор не увидит, )foo".

Таким образом, вы можете использовать ", \ и практически любые другиесимволов, пока вы выбираете разделители.Разделитель также может быть пустым, поэтому R"(some stuff)" эквивалентно "some stuff".Он заканчивается, когда видит )".

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