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 的绝对值。若结果无法用返回类型表示,则行为未定义。
如果使用无法通过
整型提升
转换为
int
的无符号整型实参调用
std::abs
,则程序非良构。
|
当且仅当
std::intmax_t
为
扩展整数类型
时,
|
(C++11 起) |
目录 |
参数
| num | - | 整数值 |
返回值
num
的绝对值(即
|num|
),若其可被表示。
注释
在 二进制补码 系统中,最小负值的绝对值超出表示范围,例如对于32位二进制补码类型 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); // 在二进制补码系统上的未定义行为 }
输出:
abs(+3) = +3 abs(-3) = +3
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 应用于 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| LWG 2192 | C++98 |
std::abs
的重载版本
在两个头文件中声明不一致 |
在两个头文件中
均声明这些重载版本 |
参见
|
(C++11)
(C++11)
|
浮点值的绝对值 (
|x|
)
(函数) |
|
返回复数的模
(函数模板) |
|
|
对 valarray 的每个元素应用函数
abs
(函数模板) |
|
|
C 文档
关于
abs
,
labs
,
llabs
|
|