首页 > 解决方案 > int和short处理有符号溢出的区别

问题描述

有符号溢出int是未定义的行为:

int a = INT_MAX;
a += 1; // Undefined Behavior

的相同操作short是实现定义的(如果short小于int):

short a = SHRT_MAX;
a += 1; // Implementation defined

它是实现定义的,因为a首先被提升为int(通常比 更宽的类型),并且在添加之后,如果值不能在 a 中表示,short则结果将转换为实现定义的。shortshort

我说得对吗?如果是,为什么有区别?两者都是未定义的行为或定义的实现不是合乎逻辑的吗?

标签: c++

解决方案


推荐阅读