当i++导致整数溢出时会发生什么
What happens when i++ causes an integer overflow?
可能重复:
C++下溢和上溢
我在c++中有以下代码:
int temp = std::numeric_limits<int>::max();
temp++;
我确信递增后的结果总是<0?
感谢
不,不能保证。C++03在5 Expressions, paragraph 5
:中有这样的说法
如果在评估表达式的过程中,结果没有在数学上定义,或者不在其类型的可表示值范围内,则行为是未定义的,除非这样的表达式是常量表达式,在这种情况下,程序格式不正确。[注意:大多数现有的C++实现都忽略整数溢出]。
此外,5.7 Additive operators
中没有任何内容可以改变这种行为。这在C++11中是不变的。
这是针对签名类型的,这是您在问题中询问的内容。
如果您也对无符号类型感兴趣,3.9.1 Fundamental types, paragraph 4
部分指出:
声明为无符号的无符号整数应遵守算术模2n的定律,其中n是该特定大小整数的值表示中的位数(见脚注41)。
脚注41:这意味着无符号算术不会溢出,因为无法由结果的无符号整数类型表示的结果会以比所产生的无符号整型所能表示的最大值大一的数字为模进行减少。
否,有符号积分类型中的溢出会导致未定义的行为。
编辑:除了paxdiablo的报价:
3.9.1.
注46)这意味着无符号算术不会溢出,因为无法由生成的无符号整数表示的结果类型被模化为比最大值大一的数字可以由生成的无符号整数类型表示的值。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 什么时候调用组成单元对象的析构函数
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 什么时候在C++中返回常量引用是个好主意
- GetModuleFilenameEx返回0,getlasterror返回溢出错误.我究竟做错了什么
- 当i++导致整数溢出时会发生什么
- 缓冲区溢出时会发生什么
- 我的溢出()实现有什么问题
- 在这种情况下,溢出是什么意思
- 如果STDOUT缓冲区溢出会发生什么
- 指针下溢或溢出时会发生什么情况
- 不同的编译器用来处理数字转换中的溢出的常见策略是什么?
- 我的while程序溢出了?我做错了什么?
- 在c++中检测缓冲区溢出源的最佳方法是什么?
- 什么时候需要检查整数溢出
- 是什么原因导致此缓冲区溢出警告超过64位VS2012编译环境
- 是什么导致了 fprintf 的C++缓冲区溢出错误