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

Почему этот код с '1234' компилируется в С++?

Почему это компилируется:

char ch = '1234'; //no error

Но не более 4 char:

char ch = '12345'; //error: Too many chars in constant

(Да, я знаю, что ' ' используется для одного char и " " для строк, я просто экспериментировал)

Это связано с тем, что char представлены с использованием ASCII-чисел?

4b9b3361

Ответ 1

Это многоканальный литерал и имеет тип int.

С++ 11 §2.13.2 Символьные литералы

Символьный литерал - это один или несколько символов, заключенных в одинарные кавычки, как в ’x’, необязательно перед буквой L, как в L’x’. Литерал символов, который не начинается с L, является литералом обычного характера, также называемым узкосимвольным литералом. Литерал обычного символа, который содержит один c- char, имеет тип char со значением, равным числовому значению кодирования c- char в наборе символов выполнения. Литерал обычного характера, содержащий более одного c- char, представляет собой многоканальный литерал. Многоканальный литерал имеет тип int и значение, определяемое реализацией.

Ответ 2

С++ имеет нечто, называемое "многоканальными литералами". '1234' - пример одного. Они имеют тип int, и оно определяется реализацией, какое значение они имеют и сколько символов они могут содержать.

Это не имеет ничего общего с тем, что символы представлены как целые числа, но есть вероятность, что в вашей реализации значение '1234' определяется как:

'1' + 256 * '2' + 256 * 256 * '3' + 256 * 256 * 256 * '4'

или

'4' + 256 * '3' + 256 * 256 * '2' + 256 * 256 * 256 * '1'