Что такое необработанная строка? - PullRequest
2 голосов
/ 21 июня 2019

Я наткнулся на этот фрагмент кода в C ++ 17 draft n4713:

#define R "x"
const char* s = R"y"; // ill-formed raw string, not "x" "y"

Что такое "необработанная строка"? Что это делает?

Ответы [ 3 ]

6 голосов
/ 21 июня 2019

Необработанные строковые литералы - это строковые литералы, разработанные для облегчения включения вложенных символов, таких как кавычки и обратные слеши, которые обычно имеют значения в качестве разделителей и запуска escape-последовательности.Они полезны, скажем, для кодирования текста, такого как HTML.Например, контраст

"<a href=\"file\">C:\\Program Files\\</a>"

, который является обычным строковым литералом, с

R"(<a href="file">C:\Program Files\</a>)"

, который является необработанным строковым литералом.Здесь использование скобок в дополнение к кавычкам позволяет С ++ отличать вложенную кавычку от кавычек, ограничивающих саму строку.

1 голос
/ 21 июня 2019

Обычно необработанная строка литерал - это строка, в которой не обрабатываются управляющие символы (например, \n \t или \") в C ++. Необработанный строковый литерал, который начинается с R"( и заканчивается на )", введенный в C++11

префикс (необязательно) R "разделитель (raw_characters) разделитель"

префикс - один из L, u8, u, U

Благодаря @ Реми Лебо , delimiter является необязательным и обычно опускается, но есть угловые случаи, когда это действительно необходимо, в частности, если содержимое строки содержит последовательность символов )", например: R"(...)"...)", поэтому вам потребуется разделитель для избежать ошибки, например: R"x(...)"...)x".

См. Пример:

#include <iostream>
#include <string> 
using namespace std;

int main()
{
    string normal_str="First line.\nSecond line.\nEnd of message.\n";
    string raw_str=R"(First line.\nSecond line.\nEnd of message.\n)";
    cout<<normal_str<<endl;
    cout<<raw_str<<endl;
    return 0;
}

выход:

Первая строка.

Вторая строка.

Конец сообщения.

Первая строка. \ NВторая строка. \ NКонец сообщения. \ N

0 голосов
/ 21 июня 2019

Необработанный строковый литерал. Используется, чтобы избежать побега любого персонажа. Все, что находится между разделителями, становится частью строки. префикс, если он присутствует, имеет то же значение, что и описанный выше.

C ++ Ссылка: строковый литерал

Необработанная строка определяется следующим образом:

string raw_str=R"(First line.\nSecond line.\nEnd of message.\n)";

и разница в том, что необработанная строка игнорирует (экранирует) все специальные символы, такие как \ n ant \ t, и угрожает им, как обычный текст.

Таким образом, приведенная выше строка будет представлять собой одну строку с 3 действительными \ n в ней вместо 3 отдельных строк.

Вам необходимо удалить строку определения и добавить круглые скобки вокруг вашей строки, чтобы ее можно было рассматривать как необработанную строку.

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