◐ Shell
clean mode source ↗

std::abs, std::labs, std::llabs, std::imaxabs — cppreference.com

Материал из cppreference.com

<tbody> </tbody>

Определено в заголовочном файле <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 путём целочисленного преобразования, программа некорректна.

Параметры

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 были несогласованно объявлены
в двух заголовках
эти перегрузки объявлены в обоих заголовках

Смотрите также