5.7 Overflow in Arithmetic Operations
Integer overflow can be a major source of bugs. Rust addresses this issue as follows:
5.7.1 Debug Mode
In debug builds, Rust checks for integer overflow and panics if it occurs:
let x: u8 = 255;
let y = x + 1; // Code like this would panic in debug mode
5.7.2 Release Mode
In release builds, integer overflow wraps around using two’s complement arithmetic by default (e.g., 255 + 1 in an 8-bit type wraps to 0).
5.7.3 Explicit Overflow Handling
If you need a specific overflow behavior in both debug and release modes, Rust provides methods in the standard library:
- Wrapping:
wrapping_add,wrapping_sub, etc. - Checked:
checked_addreturnsNoneon overflow. - Saturating:
saturating_addcaps values at the numeric boundary. - Overflowing:
overflowing_addreturns a tuple(result, bool_overflowed).