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

Why does this code with '1234' compile in C++?

本文关键字:C++ 编译 代码 1234 段带 为什么      更新时间:2023-10-16

为什么编译:

char ch = '1234'; //no error

但不超过 4 char 秒:

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

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

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

C++有一个名为"多字符文字"的东西。 '1234'就是一个例子。它们有类型 int ,并且它是实现定义的,它们具有什么值以及它们可以包含多少个字符。

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

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

或:

'4' + 256 * '3' + 256 * 256 * '2' + 256 * 256 * 256 * '1'
它是一个

多字符文本,并且具有一种int

C++11 §2.13.2 字符文字

字符

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