std:: abs, std:: labs, std:: llabs, std:: imaxabs
|
ヘッダー
<cstdlib>
で定義
|
||
|
ヘッダー
<cmath>
で定義
|
||
|
int
abs
(
int
num
)
;
|
(1) | (C++23以降 constexpr) |
|
long
abs
(
long
num
)
;
|
(2) | (C++23以降 constexpr) |
|
long
long
abs
(
long
long
num
)
;
|
(3) |
(C++11以降)
(C++23以降 constexpr) |
|
ヘッダー
<cstdlib>
で定義
|
||
|
long
labs
(
long
num
)
;
|
(4) | (C++23以降 constexpr) |
|
long
long
llabs
(
long
long
num
)
;
|
(5) |
(C++11以降)
(C++23以降 constexpr) |
|
ヘッダー
<cinttypes>
で定義
|
||
|
std::
intmax_t
abs
(
std::
intmax_t
num
)
;
|
(6) |
(C++11以降)
(C++23以降 constexpr) |
|
std::
intmax_t
imaxabs
(
std::
intmax_t
num
)
;
|
(7) |
(C++11以降)
(C++23以降 constexpr) |
整数値 num の絶対値を計算します。戻り値の型で表現できない場合の動作は未定義です。
std::abs
が、
整数プロモーション
によって
int
に変換できない符号なし整数型の引数で呼び出された場合、プログラムは不適格となります。
|
|
(C++11以降) |
目次 |
パラメータ
| num | - | 整数値 |
戻り値
num
の絶対値(すなわち
|num|
)が表現可能な場合の値。
注記
2の補数 システム において、最も負の値の絶対値は範囲外となります。例えば、32ビット2の補数型 int の場合、 INT_MIN は - 2147483648 ですが、結果となるべき値 2147483648 は INT_MAX である 2147483647 を超えています。
例
#include <climits> #include <cstdlib> #include <iostream> int main() { std::cout << std::showpos << "abs(+3) = " << std::abs(3) << '\n' << "abs(-3) = " << std::abs(-3) << '\n'; // std::cout << std::abs(INT_MIN); // undefined behavior on 2's complement systems }
出力:
abs(+3) = +3 abs(-3) = +3
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 2192 | C++98 |
std::abs
のオーバーロードが
2つのヘッダーで矛盾して宣言されていた |
これらのオーバーロードを
両方のヘッダーで宣言する |
関連項目
|
(C++11)
(C++11)
|
浮動小数点値の絶対値 (
|x|
)
(関数) |
|
複素数の絶対値を返す
(関数テンプレート) |
|
|
関数
abs
をvalarrayの各要素に適用する
(関数テンプレート) |
|
|
Cドキュメント
for
abs
,
labs
,
llabs
|
|