处理有符号的int和short溢出的区别

时间:2018-08-08 19:27:51

标签: c++

int的签名溢出是未定义的行为:

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

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

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

这是实现定义的,因为首先将a提升为int(通常比short宽得多的类型),然后将结果转换为{{1} }(由实现定义),如果该值不能用short表示。

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

0 个答案:

没有答案