为什么这段带有'1234'的代码在C++中编译?
Why does this code with '1234' compile in C++?
为什么编译:
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
和实现定义的值。