namespace std {
intmax_t imaxabs(intmax_t j); // (1) C++11
constexpr intmax_t imaxabs(intmax_t j); // (1) C++23
intmax_t abs(intmax_t j); // (2) C++11
constexpr intmax_t abs(intmax_t j); // (2) C++23
}
概要
最大幅の符号付き整数型 intmax_t の絶対値を求める。imaxabs は integer maximum absolute value(最大幅整数の絶対値)の略。
戻り値
引数 j の絶対値を返す。
備考
- (2) : このオーバーロードは、
intmax_tが拡張整数型である場合にのみ宣言される。(intmax_tがlongやlong longのような標準の整数型である場合、<cstdlib>のabsのオーバーロードと重複するため宣言されない。) jの絶対値がintmax_tで表現できない場合、動作は未定義である。- 一般的な2の補数表現のシステムにおいて、
intmax_tの最小値の絶対値は、表現できる最大値よりも1大きくなってしまうため、この未定義動作に該当する。
例
#include <iostream>
#include <cinttypes>
int main()
{
std::intmax_t x = std::imaxabs(-1234);
std::cout << x << std::endl;
}
出力
1234
バージョン
言語
- 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化した際に漏れていたimaxabs(およびabsのオーバーロード)がconstexpr化された
- C++23で、P0533R9が