std::abs, std::labs, std::llabs, std::imaxabs
來自 cppreference.com
定義於標頭檔案 <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> |
||
std::intmax_t abs( std::intmax_t num ); |
(6) | (C++11 起) (C++23 起為 constexpr) |
std::intmax_t imaxabs( std::intmax_t num ); |
(7) | (C++11 起) (C++23 起為 constexpr) |
計算整數 num 的絕對值。如果結果不能由返回型別表示,則行為未定義。
如果呼叫 std::abs
時使用無符號整型引數,且該引數不能透過整型提升轉換為 int,則程式格式錯誤。
僅當 std::intmax_t 是擴充套件整型時,才在 <cinttypes> 中提供 |
(C++11 起) |
目錄 |
[編輯] 引數
num | - | 整數值 |
[編輯] 返回值
如果 num 的絕對值可表示,則返回其絕對值(即 |num|
)。
[編輯] 注意
在2 的補碼系統中,最負值的絕對值超出範圍,例如對於 32 位 2 的補碼型別 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++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 2192 | C++98 | std::abs 的過載在兩個標頭檔案中宣告不一致 |
在兩個標頭檔案中 聲明瞭這些過載 |
[編輯] 參閱
(C++11)(C++11) |
浮點值的絕對值(|x|) (函式) |
返回複數的模 (函式模板) | |
將函式 abs 應用於 valarray 的每個元素 (函式模板) | |