C++ Нераспознанная escape-последовательность

Я хочу создать строку, которая содержит все возможные специальные символы.

Однако компилятор выдает мне предупреждение "Нераспознанная escape-последовательность" в этой строке:

wstring s=L".,;*:-_⁊#‘⁂‡…–«»¤¤¡=„+-¶~´:№\¯/?‽!¡-¢–”¥—†¿»¤{}«[-]()·^°$§%&«|⸗<´>²³£­€™℗@©®~µ´`'" + wstring(1,34);

Кто-нибудь может сказать мне, какой из символов я не могу добавить к этой строке, как я сделал?

Большое спасибо!

1 ответ

Решение

Ты должен сбежать \ как \\, иначе будет интерпретироваться как (недопустимая) escape-последовательность:

wstring s=L".,;*:-_⁊#‘⁂‡…–«»¤¤¡=„+-¶~´:№\\¯/?‽!¡-¢–”¥—†¿»¤{}«[-]()·^°$§%&«|⸗<´>²³£­€™℗@©®~µ´`'" + wstring(1,34);

Escape-последовательность - это строка символов, значение которой отличается от значения самих буквальных символов. В C и C++ последовательность начинается с\ поэтому, если ваша строка содержит двойные кавычки или обратную косую черту, ее необходимо правильно экранировать, используя \" а также \\

В длинных копируемых строках может быть трудно обнаружить эти символы, и в будущем это будет труднее поддерживать, поэтому рекомендуется использовать необработанные строковые литералы с префиксомR так что вам вообще не нужны побеги

wstring s = LR"(.,;*:-_⁊#‘⁂‡…–«»¤¤¡=„+-¶~´:№\¯/?‽!¡-¢–”¥—†¿»¤{}«[-]()·^°$§%&«|⸗<´>²³£­€™℗@©®~µ´`')"
          + wstring(1,34);

За скобками может быть вставлена ​​специальная строка-разделитель, например LR"delim(special string)delim" если ваша необработанная строка содержит )" последовательность

Другие вопросы по тегам