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 lettreL
, comme dansL'x'
. Un littéral de caractère qui ne commence pas parL
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 typeint
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'