Как экранировать символы при назначении типу char (не String) в C ++ - PullRequest
1 голос
/ 04 ноября 2011

Я читал аналогично этому обсуждению здесь, на SO на прошлой неделе, и теперь у меня проблема, я не могу найти эту ветку.

Мне нужно присвоить символ двойной кавычки "переменной типа wchar_t, я использую

wchar_t atest = '"';
wchar_t atest2 = '\"';

В отладчике VS atest отображается как 34 L'"' (теперь я вижу, где отдельные кавычки), а atest2 равно 38 L'&' Я понимаю, что использовать сейчас, но не почему. Что происходит, когда я создаю atest2?

Ответы [ 2 ]

2 голосов
/ 04 ноября 2011
wchar_t atest = '"';
wchar_t atest2 = '\"';

Эти два эквивалентны.

Некоторые символы должны быть экранированы в символьных литералах, включая сам \, поэтому символ обратной косой черты равен '\\'.

Символ двойной кавычки может опционально экранироваться. Предположительно это для согласованности со строковыми литералами, где они должны быть экранированными. Точно так же символ одинарной кавычки должен быть экранирован в литералах символов и может быть экранирован в строковых литералах.

(Нет, '\"' не является многосимвольной константой.)

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

То, что у вас есть, является многосимвольной константой. Они допустимы в соответствии со спецификациями C (++), но их интерпретация определяется реализацией. См. MSDN для подробностей, но вкратце: не делайте этого.

...