为什么这个带有'1234'的代码在C ++中编译?

时间:2013-10-16 02:10:32

标签: c++ char

为什么要编译:

char ch = '1234'; //no error

但不能超过4 char s:

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

(是的,我知道' '用于一个char" "用于字符串;我只是在尝试)

这是否与使用ASCII号表示char的事实有关?

2 个答案:

答案 0 :(得分:16)

C ++有一种称为“多字符文字”的东西。 '1234'是一个例子。它们的类型为int,它是实现定义的,它们具有的值以及它们可以包含的字符数。

直接直接与字符表示为整数的事实无关,但在实现中'1234'的值被定义为:

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

或:

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

答案 1 :(得分:15)

它是一个多字符文字,类型为int

  

C ++11§2.13.2字符文字

     

字符文字是用单引号括起来的一个或多个字符,如’x’中,可选地以字母L开头,如L’x’中所示。不以L开头的字符文字是普通字符文字,也称为窄字符文字。包含单个c-char的普通字符文字具有char类型,其值等于执行字符集中c-char的编码的数值。 包含多个c-char的普通字符文字是多字符文字。多字符文字具有类型int和实现定义的值。