最終更新日時: 2024年09月03日 15時17分49秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<cstdlib>

# std::div

    namespace std {
      div_t
        div(int numer,
            int denom);         // (1) C++03
      constexpr div_t
        div(int numer,
            int denom);         // (1) C++23

      ldiv_t
        div(long numer,
            long denom);        // (2) C++03
      constexpr ldiv_t
        div(long numer,
            long denom);        // (2) C++23

      lldiv_t
        div(long long numer,
            long long denom);   // (3) C++03
      constexpr lldiv_t
        div(long long numer,
            long long denom);   // (3) C++23

      ldiv_t
        ldiv(long numer,
             long denom);       // (4) C++03
      constexpr ldiv_t
        ldiv(long numer,
             long denom);       // (4) C++23

      lldiv_t
        lldiv(long long numer,
              long long denom); // (5) C++11
      constexpr lldiv_t
        lldiv(long long numer,
              long long denom); // (5) C++23
    }

## 概要

`numer / denom`と`numer % denom`の計算をひとつの操作で行う。

- (1) : `int`型のオーバーロード
- (2) : `long`型のオーバーロード
- (3) : `long long`型のオーバーロード
- (4) : `long`型規定
- (5) : `long long`型規定

## 戻り値

戻り値型となるクラスの`quot`に商、`rem`に剰余を代入して返す。

結果のどちらかが表現できない場合は未定義動作を引き起こす。

## 例

    #include <iostream>
    #include <cstdlib>

    int main()
    {
      std::div_t x = std::div(5, 2);
      std::cout << x.quot << std::endl;
      std::cout << x.rem << std::endl;
    }

### 出力

    2
    1

### 備考

特定の環境では、早期に `constexpr` 対応されている場合がある：

- GCC 4.6.1 以上

## 参照

- P0533R9 constexpr for `<cmath>` and `<cstdlib>`
  - C++23での、一部関数の`constexpr`対応
- P1467R9 Extended floating-point types and standard names
  - C++23で導入された拡張浮動小数点数型への対応として、`float`、`double`、`long double`のオーバーロードを`floating-point-type`のオーバーロードに統合し、拡張浮動小数点数型も扱えるようにした