☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

表达式的结果在数学上没有定义

C++-Undefined-Behavior-29
目录 › next › previous

如除 0、有符号整数溢出、负数位运算、浮点异常等均会导致未定义的行为。

示例:

signed s = INT_MAX + 1;     // Undefined
unsigned u = UINT_MAX + 1;  // Well-defined

例中变量 u 的值一定是 0,而 s 的值是标准未定义的,往往由编译器和执行环境决定。

设无符号整数的最大值为 M,无符号整数运算在程序中的结果是数学上的结果与 (M + 1) 取模的结果,这在数学上是有明确定义的,而对于有符号整数,将符号位移出相关比特位,或将非符号位移入符号位,在数学上是没有意义的,故称无符号整数不存在溢出问题,有符号整数存在溢出问题,溢出会导致未定义的行为。

依据

ISO/IEC 14882:2003 5(5)-undefined ISO/IEC 14882:2011 5(4)-undefined

规则

ID_divideByZero ID_evalOverflow
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.