Namespaces
Variants

std:: abs, std:: labs, std:: llabs, std:: imaxabs

From cppreference.net
Common mathematical functions
Nearest integer floating point operations
(C++11)
(C++11)
(C++11) (C++11) (C++11)
Floating point manipulation functions
(C++11) (C++11)
(C++11)
(C++11)
Classification and comparison
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Types
(C++11)
(C++11)
(C++11)
Macro constants
定义于头文件 <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>
(6) (自 C++11 起)
(自 C++23 起为 constexpr)
(7) (自 C++11 起)
(自 C++23 起为 constexpr)

计算整数 num 的绝对值。若结果无法用返回类型表示,则行为未定义。

如果使用无法通过 整型提升 转换为 int 的无符号整型实参调用 std::abs ,则程序非良构。

当且仅当 std::intmax_t 扩展整数类型 时, std::abs 重载 (6) 会在 <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 << std::abs(INT_MIN); // 在二进制补码系统上的未定义行为
}

输出:

abs(+3) = +3
abs(-3) = +3

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 应用于 发布时的行为 正确行为
LWG 2192 C++98 std::abs 的重载版本
在两个头文件中声明不一致
在两个头文件中
均声明这些重载版本

参见

浮点值的绝对值 ( |x| )
(函数)
返回复数的模
(函数模板)
对 valarray 的每个元素应用函数 abs
(函数模板)
C 文档 关于 abs , labs , llabs