- cinttypes[meta header]
- std[meta namespace]
- function[meta id-type]
- cpp11[meta cpp]
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[link /reference/cstdint/intmax_t.md]
最大幅の符号付き整数型 intmax_t の絶対値を求める。imaxabs は integer maximum absolute value(最大幅整数の絶対値)の略。
- (1) :
intmax_tに対するオーバーロード。 - (2) : (1)と同じ機能を持つ、
absという名前のオーバーロード。
引数 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;
}- std::imaxabs[color ff0000]
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が