У меня есть спор с моим коллегой. Она говорит что следующее:
char* a = "\x000aaxz";
/ видны компилятором как "\x000aa". Я не соглашаюсь с нею, поскольку я думаю, что у Вас может быть максимальное количество 4 шестнадцатеричных символов после \x
. У Вас может быть больше чем 4 шестнадцатеричных символа?
Кто прямо здесь?
§2.13.2 / 4:
Escape \ xhhh состоит из обратной косой черты , за которой следует x, за которым следует один или несколько шестнадцатеричных чисел цифры, которые используются для указания значения желаемого символа . Не существует ограничения на количество цифр в шестнадцатеричной последовательности . Последовательность восьмеричных или шестнадцатеричных цифр завершается первым символом, который не является восьмеричной или шестнадцатеричной цифрой соответственно.
Она права.
Тем не менее, вы можете прервать его раньше, используя активную цепочку: последовательность литералов "\ x000a" "axz"
задает один строковый литерал из четырех символов. (2.13.4 / 3)
Также обратите внимание, что Unicode использует 21-битные кодовые точки ; он не останавливается на 16 битах.
Цитата из MSDN о символьных константах C ++:
Восьмеричные escape-последовательности, заданные в форме \ ooo, состоят из обратной косой черты и одного, двух или трех восьмеричных символов. Шестнадцатеричные escape-последовательности, заданные в форме \ xhhh, состоят из символов \ x, за которыми следует последовательность шестнадцатеричных цифр. В отличие от восьмеричных управляющих констант, количество шестнадцатеричных цифр в управляющей последовательности не ограничено.