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

履歴 編集

function template
<numeric>

# std::saturating_sub(C++26)

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

## 概要

飽和減算 `x - y` を計算する。

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

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

## 戻り値

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

## 例外

投げない

## 例

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

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

      // 1 - 3 = -2 -> 0
      std::println("{}", std::saturating_sub(1u, 3u));

      // -100 - 50 = -150 -> -128(-2**7)
      std::int8_t x = -100, y = 50;
      std::println("{}", std::saturating_sub(x, y));
    }

### 出力

    2
    0
    -128

## バージョン

### 言語

- C++26

### 処理系

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

## 参照

- P0543R3 Saturation arithmetic
- P4052R0 Renaming saturation arithmetic functions