std::abs, std::labs, std::llabs, std::imaxabs
来自cppreference.com
在标头 <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 是扩展整数类型时,<cinttypes> 中才会提供 |
(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 << abs(INT_MIN); // 补码系统上行为未定义 }
输出:
abs(+3) = 3 abs(-3) = 3
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 2192 | C++98 | std::abs 的重载不一致地在两个头文件声明
|
在两个头文件中都声明这些重载 |
参阅
(C++11)(C++11) |
浮点值的绝对值(|x|) (函数) |
返回复数的模 (函数模板) | |
应用函数 std::abs 到 valarray 的每个元素 (函数模板) |