std::abs, std::labs, std::llabs, std::imaxabs — cppreference.com
Материал из cppreference.com
<tbody> </tbody>
| Определено в заголовочном файле |
||
| Определено в заголовочном файле |
||
|
|
(1) | (constexpr начиная с C++23) |
|
|
(2) | (constexpr начиная с C++23) |
|
|
(3) | (начиная с C++11) (constexpr начиная с C++23) |
| Определено в заголовочном файле |
||
|
|
(4) | (constexpr since C++23) |
|
|
(5) | (начиная с C++11) (constexpr начиная с C++23) |
| Определено в заголовочном файле |
||
|
|
(6) | (начиная с C++11) (constexpr since C++23) |
|
|
(7) | (начиная с C++11) (constexpr since C++23) |
Вычисляет абсолютное значение целого числа num. Поведение не определено, если результат не может быть представлен возвращаемым типом.
Если std::abs вызывается с целочисленным аргументом без знака, который нельзя преобразовать в int путём целочисленного преобразования, программа некорректна.
Параметры
| 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 были несогласованно объявленыв двух заголовках |
эти перегрузки объявлены в обоих заголовках |