根据C17 6.3.1.1
如果int可以表示原始类型的所有值(对于位字段,受宽度限制),则该值将转换为int;否则,它将转换为无符号整数。
“所有值”是否表示同一范围内的整个标识符? 那么,当某些标识符具有在同一标识符范围内不能由int表示的变量(例如long long int)时,标识符没有任何提升吗?
答案 0 :(得分:2)
“所有值”是否表示同一范围内的整个标识符?
我不确定为什么您认为作用域中的所有标识符都很重要。整数促销适用于单个项目,无论是对象(例如变量)还是表达式。
意思是说,如果该项目的每个可能值(已经保证您引用的段落中的段落都适合int
或unsigned int
的类型之一, ))可以由int
类型表示,它将提升为int
。否则,它将升级为unsigned int
。
(a)文本完整说明:
在可以使用
int
或unsigned int
的表达式中可以使用以下内容:
具有整数类型(
int
或unsigned int
除外)的对象或表达式,其整数转换等级小于或等于int
的等级,并且unsigned int
。类型为
_Bool
,int
,signed int
或unsigned int
的位字段。如果
int
可以表示原始类型的所有值(受位字段的宽度限制),则该值将转换为int
;否则,它将转换为unsigned int
。这些称为整数促销。整数促销未更改所有其他类型。