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

Mem*_*emo 18 c++ char

为什么编译:

char ch = '1234'; //no error
Run Code Online (Sandbox Code Playgroud)

但不超过4 char秒:

char ch = '12345'; //error: Too many chars in constant
Run Code Online (Sandbox Code Playgroud)

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

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

Ste*_*sop 17

C++有一种叫做"多字符文字"的东西.'1234'是一个例子.它们具有类型int,并且实现定义了它们具有的值以及它们可以包含的字符数.

这与字符表示为整数这一事实没有直接关系,但在您的实现中,值'1234'被定义为:

'1' + 256 * '2' + 256 * 256 * '3' + 256 * 256 * 256 * '4'
Run Code Online (Sandbox Code Playgroud)

要么:

'4' + 256 * '3' + 256 * 256 * '2' + 256 * 256 * 256 * '1'
Run Code Online (Sandbox Code Playgroud)


Yu *_*Hao 16

它是一个多字符文字,有一种类型int.

C++11§2.13.2字符文字

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