std::abs、std::labs、std::llabs、std::imaxabs
来自 cppreference.com
定义在头文件 <cstdlib> 中 |
||
定义在头文件 <cmath> 中 |
||
int abs( int num ); |
(1) | (constexpr 自 C++23 起) |
long abs( long num ); |
(2) | (constexpr 自 C++23 起) |
long long abs( long long num ); |
(3) | (自 C++11 起) (constexpr 自 C++23 起) |
定义在头文件 <cstdlib> 中 |
||
long labs( long num ); |
(4) | (constexpr 自 C++23 起) |
long long llabs( long long num ); |
(5) | (自 C++11 起) (constexpr 自 C++23 起) |
定义在头文件 <cinttypes> 中 |
||
std::intmax_t abs( std::intmax_t num ); |
(6) | (自 C++11 起) (constexpr 自 C++23 起) |
std::intmax_t imaxabs( std::intmax_t num ); |
(7) | (自 C++11 起) (constexpr 自 C++23 起) |
计算整数 num 的绝对值。如果结果无法用返回值类型表示,则行为未定义。
如果 std::abs 被调用时使用的是一个无符号整型参数,该参数无法通过 整型提升 转换为 int,则程序将是非法的。
如果 std::intmax_t 是 扩展整型,则 <cinttypes> 中将提供用于 std::intmax_t 的 std::abs 的重载 (6)。 |
(自 C++11 起) |
内容 |
[编辑] 参数
num | - | 整数值 |
[编辑] 返回值
num 的绝对值(即 |num|
),如果可表示。
[编辑] 备注
在 二进制补码 系统中,最负值的绝对值超出了范围,例如对于 32 位二进制补码类型 int,INT_MIN 是 -2147483648,但可能的返回值 2147483648 大于 INT_MAX,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 的重载是 在两个头文件中声明不一致 |
在两个头文件中声明这些重载 这两个头文件中 |
[编辑] 另请参阅
(C++11)(C++11) |
浮点值的绝对值 (|x|) (函数) |
返回复数的模 (函数模板) | |
将函数 abs 应用于 valarray 的每个元素 (函数模板) | |
C 文档 for abs, labs, llabs
|