namespace std {
imaxdiv_t
imaxdiv(intmax_t numer,
intmax_t denom); // (1) C++11
constexpr imaxdiv_t
imaxdiv(intmax_t numer,
intmax_t denom); // (1) C++23
imaxdiv_t
div(intmax_t numer,
intmax_t denom); // (2) C++11
constexpr imaxdiv_t
div(intmax_t numer,
intmax_t denom); // (2) C++23
}
概要
最大幅の符号付き整数型 intmax_t に対して、numer / denomとnumer % denomの計算をひとつの操作で行う。imaxdiv は integer maximum division(最大幅整数の除算)の略。
戻り値
imaxdiv_t型オブジェクトのquotに商、remに剰余を代入して返す。
結果のどちらかがintmax_tで表現できない場合、動作は未定義である。
備考
- (2) : このオーバーロードは、
intmax_tが拡張整数型である場合にのみ宣言される。(intmax_tがlongやlong longのような標準の整数型である場合、<cstdlib>のdivのオーバーロードと重複するため宣言されない。)
例
#include <iostream>
#include <cinttypes>
int main()
{
std::imaxdiv_t x = std::imaxdiv(17, 5);
std::cout << x.quot << std::endl;
std::cout << x.rem << std::endl;
}
出力
3
2
バージョン
言語
- C++11
関連項目
参照
- N1568 Proposed additions to TR-1 to improve compatibility with C99
- LWG Issue 3834. Missing
constexprforstd::intmax_tmath functions in<cinttypes>- C++23で、P0533R9が
<cmath>・<cstdlib>をconstexpr化した際に漏れていたimaxdiv(およびdivのオーバーロード)がconstexpr化された
- C++23で、P0533R9が