Namespaces
Variants
Actions

std::add_sat

From cppreference.com
< cpp‎ | numeric
 
 
 
Saturation arithmetic
Functions
add_sat
(C++26)
(C++26)
(C++26)
(C++26)
 
Defined in header <numeric>
template< class T >
constexpr T add_sat( T x, T y ) noexcept;
(since C++26)

Computes the saturating addition x + y. This operation (unlike built-in arithmetic operations on integers) behaves as-if it is a mathematical operation with an infinite range. Let q denote the result of such operation. Returns:

  • q, if q is representable as a value of type T. Otherwise,
  • the largest or smallest value of type T, whichever is closer to the q.

This overload participates in overload resolution only if T is an integer type, that is: signed char, short, int, long, long long, an extended signed integer type, or an unsigned version of such types. In particular, T must not be (possibly cv-qualified) bool, char, wchar_t, char8_t, char16_t, and char32_t, as these types are not intended for arithmetic.

Contents

[edit] Parameters

x, y - integer values

[edit] Return value

Saturated x + y.

[edit] Notes

Unlike the built-in arithmetic operators on integers, the integral promotion does not apply to the x and y arguments.

If two arguments of different type are passed, the call fails to compile, i.e. the behavior relative to template argument deduction is the same as for std::min or std::max.

Most modern hardware architectures have efficient support for saturation arithmetic on SIMD vectors, including SSE2 for x86 and NEON for ARM.

Feature-test macro Value Std Feature