我在c ++中有以下代码:
int temp = std::numeric_limits<int>::max();
temp++;
我确定在增加后,结果将始终为&lt; 0?
由于
答案 0 :(得分:4)
不,这不保证。 C ++ 03在5 Expressions, paragraph 5
中有这个说法:
如果在评估表达式期间,结果未在数学上定义或未在其类型的可表示值范围内,则行为未定义,除非此类表达式是常量表达式,在这种情况下程序生病-formed。 [注意:大多数现有的C ++实现忽略了整数溢出]。
此外,5.7 Additive operators
中没有任何内容可以修改此行为。这在C ++ 11中没有变化。
这是签名类型,这是您在问题中询问的内容。
如果您对无符号类型感兴趣,则3.9.1 Fundamental types, paragraph 4
部分说明:
无符号整数,声明为无符号整数,应遵守算术模2 n 的定律,其中n是整数特定大小的值表示中的位数(见脚注41)。
脚注41:这意味着无符号算术不会溢出,因为无法用结果无符号整数类型表示的结果以比模式生成的无符号整数类型所表示的最大值大1的数量为模。
答案 1 :(得分:3)
不,有符号整数类型的溢出会导致未定义的行为。
编辑:除了paxdiablo的引用:
3.9.1。
注46)这意味着无符号算术不会溢出,因为a 结果无法由结果无符号整数表示 type是以大于最大值的数量减少的模数 可以由结果无符号整数类型表示的值。