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

履歴 編集

function template
<numeric>

# std::saturating_div(C++26)

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

## 概要

飽和除算 `x / y` を計算する。

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

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

## 事前条件

`y != 0`

## 戻り値

- `T`が符号付き整数型かつ`x == numeric_limits<T>::min() && y == -1`のとき、`numeric_limits<T>::max()`を返す
- そうでなければ、`x / y`を返す

## 例外

投げない

## 定数式に評価される条件

事前条件を満たすこと

## 例

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

    int main()
    {
      // 10 / 3 = 3
      std::println("{}", std::saturating_div(10, 3));

      // -128 * -1 = 128 -> 127(2**7-1)
      std::int8_t x = -128, y = -1;
      std::println("{}", std::saturating_div(x, y));
    }

### 出力

    3
    127

## バージョン

### 言語

- C++26

### 処理系

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

## 参照

- P0543R3 Saturation arithmetic
- P4052R0 Renaming saturation arithmetic functions