Pourquoi ce code avec ‘1234’ est-il compilé en C ++?

Pourquoi cela comstack-t-il:

char ch = '1234'; //no error 

Mais rien de plus que 4 caractères:

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

(Oui je sais ' ' est utilisé pour un caractère et " " est pour les chaînes; je venais d’expérimenter)

Est-ce que cela a quelque chose à voir avec le fait que les caractères sont représentés avec des nombres ASCII?

C’est un littéral multicaractère, et a un type d’ int .

C ++ 11 §2.13.2 Littéraux de caractères

Un caractère littéral est un ou plusieurs caractères entre guillemets simples, comme dans 'x' , éventuellement précédés de la lettre L , comme dans L'x' . Un littéral de caractère qui ne commence pas par L est un littéral de caractère ordinaire, également appelé littéral de caractère étroit. Un littéral de caractère ordinaire contenant un seul c-char est de type char, avec une valeur égale à la valeur numérique de l’encodage du c-char dans le jeu de caractères d’exécution. Un littéral de caractère ordinaire contenant plus d’un c-char est un littéral à plusieurs caractères. Un littéral à plusieurs caractères a le type int et une valeur définie par l’implémentation.

C ++ a quelque chose appelé “littéraux multicaractères”. '1234' est un exemple. Ils ont le type int et leur valeur et le nombre de caractères qu’ils peuvent contenir sont définis par l’implémentation.

Cela n’a rien à voir avec le fait que les caractères sont représentés sous forme d’entiers, mais il est fort probable que dans votre implémentation, la valeur de '1234' soit définie comme étant soit:

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

ou:

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