最終更新日時: 2026年05月15日 13時58分51秒 (JST)
Akira Takahashi が更新

履歴 編集

function template
<numeric>

# std::saturating_add(C++26)

    namespace std {
      template<class T>
        constexpr T saturating_add(T x, T y) noexcept;
    }

## 概要

飽和加算 `x + y` を計算する。

## テンプレートパラメータ制約

`T`は符号付き整数型または符号無し整数型であること。

## 戻り値

- 無限の範囲で計算した値`x + y`が型`T`で表現可能ならば、`x + y`を返す
- そうでないとき、型`T`で表現可能な最大値または最小値のうち`x + y`に近い方の値を返す

## 例外

投げない

## 例

    #include <cstdint>
    #include <numeric>
    #include <print>

    int main()
    {
      // 1 + 2 = 3
      std::println("{}", std::saturating_add(1, 2));

      // 200 + 200 = 400 -> 255(2**8-1)
      std::uint8_t x = 200;
      std::println("{}", std::saturating_add(x, x));

      // -100 + -100 = -200 -> -128(-2**7)
      std::int8_t y = -100;
      std::println("{}", std::saturating_add(y, y));
    }

### 出力

    3
    255
    -128

## バージョン

### 言語

- C++26

### 処理系

- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??

## 参照

- P0543R3 Saturation arithmetic
- P4052R0 Renaming saturation arithmetic functions