int
我在问自己,在某些情况下,是否提升所有类型(除了一些例外)的等级低于int
执行算术运算可能会导致 UB。
例如:
unsigned short a = 0xFFFF;
unsigned short b = a*a;
由于 unsigned short 被提升为int
算术运算,这将导致:
unsigned short a = 0xFFFF;
unsigned short b = (int)a*(int)a;
As(int)0xFFFF*(int)0xFFFF
会导致溢出,而有符号类型的溢出是 UB:在以下情况下,两个无符号短裤相乘x,y
会导致未定义的行为x*y > INT_MAX
更新:
该问题专门针对int
32 位和short
16 位的情况。