Подтвердить что ты не робот

Что такое эквивалент С++ для строк префикса символов С# @?

Что такое эквивалент С++ для строк префикса символов С# @? Для автоматического выведения символов?

Пример: var howManySlashesAreThereIn = @"\\\\\\";

4b9b3361

Ответ 1

В С++ 11 вы можете использовать строковые литералы строки:

std::string s = R"(This\is\a\raw\string\literal)";

std::string s = R"*(This \one contains \a )", which would normally end the string)*";

Здесь С++ 11 FAQ на нем, и reference.

Ответ 2

Вы ищете функцию "raw string" на С++, но это довольно недавнее дополнение (похоже, С++ 11).

std::string howManySlashesAreThereIn = R"(\\\\\\)";

Он задокументирован в 2.14.5 String lieterals стандарта С++ 11, хотя этот томе может быть немного сухим для вас, поэтому я предлагаю googling на "raw string" c++.

Кроме того, чтобы избавиться от этих монстрозитов с удвоением удвоения, таких как "\\\\nasbox\\sharename\\downloads\\super_sekrit_stuff", он также позволяет обойти "добавление символов \n и комбинирование смежных строк", например, поворот:

htmlString =
    "<HTML>\n"
      "<HEAD>\n"
        "<TITLE>My page</TITLE>\n"
        "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=utf-8\">\n"
      "</HEAD>\n"
      "<BODY LINK=\"#0000ff\" VLINK=\"#800080\" BGCOLOR=\"#ffffff\">\n"
        "<P> </P>\n"
        "<PRE>\n";

во что-то более читаемое (не совсем то же самое из-за пробелов во втором варианте, но отлично подходит для HTML, поскольку в этом случае оно игнорирует добавленные пробелы):

htmlString = R"xyzzy(
    <HTML>
      <HEAD>
        <TITLE>My page</TITLE>
        <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
      </HEAD>
      <BODY LINK="#0000ff" VLINK="#800080" BGCOLOR="#ffffff">
        <P> </P>
        <PRE>
    )xyzzy";

Ответ 3

С++ 11 добавляет строковые литералы raw, которые, по крайней мере, несколько похожи.

R"(This is a raw literal)";

Они особенно полезны для регулярных выражений, например:

R"@(\w+\d*)@"

... который, как традиционный литерал, будет:

"\\w+\\d*"

Хотя разница не огромна, она может иметь значение, особенно в более длинном регулярном выражении.

Ответ 4

Здесь - пример исходных строковых литералов (С++ 11).

Новые строки и обратные косые черты отображаются дословно.