名稱空間
變體
操作

std::numeric_limits

來自 cppreference.com
< cpp‎ | types
 
 
 
型別支援
基本型別
定寬整數型別 (C++11)
定寬浮點型別 (C++23)
(C++11)    
(C++17)
數值極限
numeric_limits
C 數值極限介面
執行時型別資訊
 
 
定義於標頭檔案 <limits>
template< class T > class numeric_limits;

std::numeric_limits 類模板提供查詢算術型別(例如, int 型別的最大可能值為 std::numeric_limits<int>::max())各種屬性的標準化方式。

該資訊透過 std::numeric_limits 模板的特化提供。標準庫為所有算術型別提供特化(此處僅列出 cv 非限定的算術型別的特化)

定義於標頭檔案 <limits>
template<> class numeric_limits<bool>;
template<> class numeric_limits<char>;
template<> class numeric_limits<signed char>;
template<> class numeric_limits<unsigned char>;
template<> class numeric_limits<wchar_t>;
template<> class numeric_limits<char8_t>;
(C++20 起)
template<> class numeric_limits<char16_t>;
(C++11 起)
template<> class numeric_limits<char32_t>;
(C++11 起)
template<> class numeric_limits<short>;
template<> class numeric_limits<unsigned short>;
template<> class numeric_limits<int>;
template<> class numeric_limits<unsigned int>;
template<> class numeric_limits<long>;
template<> class numeric_limits<unsigned long>;
template<> class numeric_limits<long long>;
(C++11 起)
template<> class numeric_limits<unsigned long long>;
(C++11 起)
template<> class numeric_limits<float>;
template<> class numeric_limits<double>;
template<> class numeric_limits<long double>;

std::numeric_limits 在 cv 限定型別 cv T 上的特化,其每個成員的值等於其在非限定型別 T 上的特化的對應成員的值。例如 std::numeric_limits<int>::digits 等於 std::numeric_limits<const int>::digits

算術型別的別名(例如 std::size_tstd::streamsize)也可以用 std::numeric_limits 型別特徵進行檢查。

非算術的標準型別,例如 std::complex<T>std::nullptr_t,沒有特化。

如果實現定義了任何整數類(integer-class)型別,那麼也必須為它們提供 std::numeric_limits 的特化。

(C++20 起)

實現可能為實現特定的型別提供 std::numeric_limits 的特化:例如 GCC 提供 std::numeric_limits<__int128>。非標準庫可能為庫提供的型別新增特化,例如 OpenEXR 為一種 16 位浮點型別提供 std::numeric_limits<half>

目錄

[編輯] 模板形參

T - 要獲取數值屬性的型別

[編輯] 成員常量

確定 std::numeric_limits 是否對該型別特化
(公開靜態成員常量) [編輯]
[靜態]
確定有符號型別
(公開靜態成員常量) [編輯]
[靜態]
確定整數型別
(公開靜態成員常量) [編輯]
[靜態]
確定精確型別
(公開靜態成員常量) [編輯]
確定可以表示特殊值“正無窮”的浮點型別
(公開靜態成員常量) [編輯]
確定可以表示特殊值“安靜的非數”(quiet not-a-number,NaN)的浮點型別
(公開靜態成員常量) [編輯]
確定可以表示特殊值“發信的非數”(signaling not-a-number,NaN)的浮點型別
(公開靜態成員常量) [編輯]
[靜態]
確定浮點型別所用的非正規化樣式
(公開靜態成員常量) [編輯]
確定將精度損失檢測為非正規化損失而非不精確結果的浮點型別
(公開靜態成員常量) [編輯]
[靜態]
確定該型別所用的舍入樣式
(公開靜態成員常量) [編輯]
[靜態]
確定 IEC 559/IEEE 754 浮點型別
(公開靜態成員常量) [編輯]
[靜態]
確定表示有限值集合的型別
(公開靜態成員常量) [編輯]
[靜態]
確定用模算術處理溢位的型別
(公開靜態成員常量) [編輯]
[靜態]
能無變化表示的 radix 數字位數
(公開靜態成員常量) [編輯]
[靜態]
能無變化表示的十進位制數字位數
(公開靜態成員常量) [編輯]
[靜態] (C++11)
區別此型別所有值所需的十進位制數字位數
(公開靜態成員常量) [編輯]
[靜態]
給定型別的表示所用的基或整數底
(公開靜態成員常量) [編輯]
比最小負數基冪大一,該基冪是有效的正規化浮點值
(公開靜態成員常量) [編輯]
作為有效的正規化浮點值的最小負 10 的冪
(公開靜態成員常量) [編輯]
比最大整數基冪大一,該基冪是有效的有限浮點值
(公開靜態成員常量) [編輯]
作為有效的有限浮點值的最大整數 10 的冪
(公開靜態成員常量) [編輯]
[靜態]
確定能導致算術運算陷入的型別
(公開靜態成員常量) [編輯]
確定舍入前檢測微小的浮點型別
(公開靜態成員常量) [編輯]

[編輯] 成員函式

[靜態]
返回給定非浮點型別的最小有限值,或給定浮點型別的最小正規化值
(公開靜態成員函式) [編輯]
[靜態] (C++11)
返回給定型別的最低有限值,即有符號型別的最負值,無符號型別的 0
(公開靜態成員函式) [編輯]
[靜態]
返回給定型別的最大有限值
(公開靜態成員函式) [編輯]
[靜態]
返回 1.0 與給定浮點型別的下一個可表示值之間的差
(公開靜態成員函式) [編輯]
[靜態]
返回給定浮點型別的最大舍入誤差
(公開靜態成員函式) [編輯]
[靜態]
返回給定浮點型別的正無窮大值
(公開靜態成員函式) [編輯]
[靜態]
返回給定浮點型別的安靜 NaN 值
(公開靜態成員函式) [編輯]
返回給定浮點型別的發信 NaN 值
(公開靜態成員函式) [編輯]
[靜態]
返回給定浮點型別的最小正非正規化值
(公開靜態成員函式) [編輯]

[編輯] 輔助類

指示浮點舍入模式
(列舉) [編輯]
指示浮點非正規化模式
(列舉) [編輯]

[編輯] 與 C 庫宏常量的關係

特化
std::numeric_limits<T>
其中 T
成員
min() lowest()
(C++11)
max() radix
bool false false true 2
char CHAR_MIN CHAR_MIN CHAR_MAX 2
signed char SCHAR_MIN SCHAR_MIN SCHAR_MAX 2
unsigned char 0 0 UCHAR_MAX 2
wchar_t WCHAR_MIN WCHAR_MIN WCHAR_MAX 2
char8_t 0 0 UCHAR_MAX 2
char16_t 0 0 UINT_LEAST16_MAX 2
char32_t 0 0 UINT_LEAST32_MAX 2
short SHRT_MIN SHRT_MIN SHRT_MAX 2
signed short
unsigned short 0 0 USHRT_MAX 2
int INT_MIN INT_MIN INT_MAX 2
signed int
unsigned int 0 0 UINT_MAX 2
long LONG_MIN LONG_MIN LONG_MAX 2
signed long
unsigned long 0 0 ULONG_MAX 2
long long LLONG_MIN LLONG_MIN LLONG_MAX 2
signed long long
unsigned long long 0 0 ULLONG_MAX 2
特化
std::numeric_limits<T>
其中 T
成員
denorm_min() min() lowest()
(C++11)
max() epsilon() digits digits10
float FLT_TRUE_MIN FLT_MIN -FLT_MAX FLT_MAX FLT_EPSILON FLT_MANT_DIG FLT_DIG
double DBL_TRUE_MIN DBL_MIN -DBL_MAX DBL_MAX DBL_EPSILON DBL_MANT_DIG DBL_DIG
long double LDBL_TRUE_MIN LDBL_MIN -LDBL_MAX LDBL_MAX LDBL_EPSILON LDBL_MANT_DIG LDBL_DIG
特化
std::numeric_limits<T>
其中 T
成員(續)
min_exponent min_exponent10 max_exponent max_exponent10 radix
float FLT_MIN_EXP FLT_MIN_10_EXP FLT_MAX_EXP FLT_MAX_10_EXP FLT_RADIX
double DBL_MIN_EXP DBL_MIN_10_EXP DBL_MAX_EXP DBL_MAX_10_EXP FLT_RADIX
long double LDBL_MIN_EXP LDBL_MIN_10_EXP LDBL_MAX_EXP LDBL_MAX_10_EXP FLT_RADIX

[編輯] 示例

#include <iostream>
#include <limits>
 
int main() 
{
    std::cout << "type\t│ lowest()\t│ min()\t\t│ max()\n"
              << "bool\t│ "
              << std::numeric_limits<bool>::lowest() << "\t\t│ "
              << std::numeric_limits<bool>::min() << "\t\t│ "
              << std::numeric_limits<bool>::max() << '\n'
              << "uchar\t│ "
              << +std::numeric_limits<unsigned char>::lowest() << "\t\t│ "
              << +std::numeric_limits<unsigned char>::min() << "\t\t│ "
              << +std::numeric_limits<unsigned char>::max() << '\n'
              << "int\t│ "
              << std::numeric_limits<int>::lowest() << "\t│ "
              << std::numeric_limits<int>::min() << "\t│ "
              << std::numeric_limits<int>::max() << '\n'
              << "float\t│ "
              << std::numeric_limits<float>::lowest() << "\t│ "
              << std::numeric_limits<float>::min() << "\t│ "
              << std::numeric_limits<float>::max() << '\n'
              << "double\t│ "
              << std::numeric_limits<double>::lowest() << "\t│ "
              << std::numeric_limits<double>::min() << "\t│ "
              << std::numeric_limits<double>::max() << '\n';
}

可能的輸出

type	│ lowest()	│ min()		│ max()
bool	│ 0		│ 0		│ 1
uchar	│ 0		│ 0		│ 255
int	│ -2147483648	│ -2147483648	│ 2147483647
float	│ -3.40282e+38	│ 1.17549e-38	│ 3.40282e+38
double	│ -1.79769e+308	│ 2.22507e-308	│ 1.79769e+308

[編輯] 缺陷報告

下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。

缺陷報告 應用於 釋出時的行為 正確的行為
LWG 201 C++98 需要為所有基礎型別提供特化 排除了非算術型別
LWG 559 C++98 不清楚 cv 限定型別的 std::numeric_limits
特化的行為是否與對應的
cv 非限定型別的特化相同
它們具有
相同的行為

[編輯] 參閱