std::abs, std::labs, std::llabs, std::imaxabs
来自 cppreference.cn
定义于头文件 <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,则程序格式错误。
仅当 std::intmax_t 是扩展整型时,才在 <cinttypes> 中提供 |
(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++ 标准。
缺陷报告 | 应用于 | 发布时的行为 | 正确的行为 |
---|---|---|---|
LWG 2192 | C++98 | std::abs 的重载在两个头文件中声明不一致 |
在两个头文件中 声明了这些重载 |
[编辑] 参阅
(C++11)(C++11) |
浮点值的绝对值(|x|) (函数) |
返回复数的模 (函数模板) | |
将函数 abs 应用于 valarray 的每个元素 (函数模板) | |