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"
если ваша необработанная строка содержит )"
последовательность