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
更新:
该问题专门针对int32 位和short16 位的情况。