命名空间
变体
操作

std::numeric_limits

来自 cppreference.com
< cpp‎ | types
 
 
实用程序库
语言支持
类型支持 (基本类型,RTTI)
库特性测试宏 (C++20)
动态内存管理
程序实用程序
协程支持 (C++20)
可变参数函数
调试支持
(C++26)
三方比较
(C++20)
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
通用实用程序
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中已弃用)
整数比较函数
(C++20)(C++20)(C++20)   
(C++20)
交换类型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
通用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
基本字符串转换
(C++17)
(C++17)

 
类型支持
基本类型
固定宽度整数类型 (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>;

cv 限定类型 cv Tstd::numeric_limits 的专门化的每个成员的值等于无限定类型 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,没有专门化。

如果实现定义了任何 整数类类型,则也必须为它们提供 std::numeric_limits 的专门化。

(自 C++20 起)

实现可以为特定于实现的类型提供 std::numeric_limits 的特化:例如 GCC 提供 std::numeric_limits<__int128>。非标准库可以 添加对库提供类型的特化,例如 OpenEXR 为 16 位浮点类型提供了 std::numeric_limits<half>

内容

[编辑] 模板参数

T - 要检索其数值属性的类型

[编辑] 成员常量

标识 std::numeric_limits 为其特化的类型
(public static member constant) [编辑]
[static]
标识有符号类型
(public static member constant) [编辑]
[static]
标识整数类型
(public static member constant) [编辑]
[static]
标识精确类型
(public static member constant) [编辑]
标识可以表示特殊值“正无穷大”的浮点类型
(public static member constant) [编辑]
标识可以表示特殊值“静默非数字”(NaN)的浮点类型
(public static member constant) [编辑]
标识可以表示特殊值“信号非数字”(NaN)的浮点类型
(public static member constant) [编辑]
[static]
标识浮点类型使用的非规格化风格
(public static member constant) [编辑]
标识将精度损失检测为非规格化损失而不是不精确结果的浮点类型
(public static member constant) [编辑]
[static]
标识类型使用的舍入风格
(public static member constant) [编辑]
[static]
标识 IEC 559/IEEE 754 浮点类型
(public static member constant) [编辑]
[static]
标识表示有限值集的类型
(public static member constant) [编辑]
[static]
标识使用模运算处理溢出的类型
(public static member constant) [编辑]
[static]
可以在不改变的情况下表示的 radix 位数
(public static member constant) [编辑]
[static]
可以在不改变的情况下表示的十进制位数
(public static member constant) [编辑]
[static] (C++11)
区分此类型所有值的所需十进制位数
(public static member constant) [编辑]
[static]
给定类型表示使用的基数或整数基数
(public static member constant) [编辑]
比作为有效规格化浮点值的最小负基数幂大 1
(public static member constant) [编辑]
作为有效规格化浮点值的最小负十的幂
(public static member constant) [编辑]
比作为有效有限浮点值的最大整数基数幂大 1
(public static member constant) [编辑]
作为有效有限浮点值的 10 的最大整数幂
(public static member constant) [编辑]
[static]
标识可能导致算术运算陷入异常的类型
(public static member constant) [编辑]
标识在舍入之前检测微小的浮点类型
(public static member constant) [编辑]

[编辑] 成员函数

[static]
返回给定类型的最小有限值
(public static member function) [编辑]
[static] (C++11)
返回给定类型的最低有限值
(public static member function) [编辑]
[static]
返回给定类型的最大有限值
(public static member function) [编辑]
[static]
返回给定浮点类型中 1.0 与下一个可表示值之间的差值
(public static member function) [编辑]
[static]
返回给定浮点类型的最大舍入误差
(public static member function) [编辑]
[static]
返回给定浮点类型的正无穷大值
(public static member function) [编辑]
[static]
返回给定浮点类型的静默 NaN 值
(public static member function) [编辑]
返回给定浮点类型的信号 NaN 值
(public static member function) [编辑]
[static]
返回给定浮点类型的最小正非规格化值
(public static member function) [编辑]

[编辑] 辅助类

指示浮点舍入模式
(enum) [编辑]
指示浮点非规格化模式
(enum) [编辑]

[编辑] 与 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
带符号 short
无符号 short 0 0 USHRT_MAX 2
int INT_MIN INT_MIN INT_MAX 2
带符号 int
无符号 int 0 0 UINT_MAX 2
long LONG_MIN LONG_MIN LONG_MAX 2
带符号 long
无符号 long 0 0 ULONG_MAX 2
long long LLONG_MIN LLONG_MIN LLONG_MAX 2
带符号 long long
无符号 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++ 标准。

DR 应用于 发布的行为 正确行为
LWG 201 C++98 所有基本类型的特化都需要提供 排除了非算术类型
LWG 559 C++98 不清楚 std::numeric_limits
对于 cv 限定类型的特化是否与
相应 cv 非限定类型的特化一样
它们具有
相同行为

[编辑] 参见