std::abs, std::labs, std::llabs, std::imaxabs
| Определено в заголовочном файле <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 since 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 since C++23) |
std::intmax_t imaxabs( std::intmax_t num ); |
(7) | (начиная с C++11) (constexpr since C++23) |
Вычисляет абсолютное значение целого числа num. Поведение не определено, если результат не может быть представлен возвращаемым типом.
Если std::abs вызывается с целочисленным аргументом без знака, который нельзя преобразовать в int путём целочисленного преобразования, программа некорректна.
|
Перегрузка (6) |
(начиная с C++11) |
Параметры
| num | — | целочисленное значение |
Возвращаемое значение
Абсолютное значение num (т.е. |num|), если оно представимо.
Примечание
В системах с дополнением до 2 абсолютное значение самого отрицательного значения выходит за пределы допустимого диапазона, например, для 32-битного типа int с дополнением до 2, 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); // неопределённое поведение в системах
// с дополнением до 2
}
Вывод:
abs(+3) = +3
abs(-3) = +3
Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| LWG 2192 | C++98 | перегрузки std::abs были несогласованно объявленыв двух заголовках |
эти перегрузки объявлены в обоих заголовках |
Смотрите также
(C++11)(C++11) |
абсолютное значение числа с плавающей запятой (|x|) (функция) |
| возвращает величину комплексного числа (шаблон функции) | |
применяет функцию abs к каждому элементу valarray (шаблон функции) | |
Документация C по abs, labs, llabs
| |