std::abs, std::labs, std::llabs, std::imaxabs
来自 cppreference.cn
定义于头文件 <cstdlib> |
||
定义于头文件 <cmath> |
||
int abs( int num ); |
(1) | (constexpr since C++23) |
long abs( long num ); |
(2) | (constexpr since C++23) |
long long abs( long long num ); |
(3) | (since C++11) (constexpr since C++23) |
定义于头文件 <cstdlib> |
||
long labs( long num ); |
(4) | (constexpr since C++23) |
long long llabs( long long num ); |
(5) | (since C++11) (constexpr since C++23) |
定义于头文件 <cinttypes> |
||
std::intmax_t abs( std::intmax_t num ); |
(6) | (since C++11) (constexpr since C++23) |
std::intmax_t imaxabs( std::intmax_t num ); |
(7) | (since C++11) (constexpr since C++23) |
计算整数 num 的绝对值。如果结果无法用返回类型表示,则行为未定义。
如果使用无法通过整型提升转换为 int 的无符号整型参数调用 std::abs
,则程序是非良构的。
|
(since 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); // 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 文档 关于 abs, labs, llabs
|