最終更新日時(UTC):
が更新

履歴 編集

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 / denomnumer % 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 以上

参照