- C 标准库
- C 标准库
- C++ 标准库
- C++ 库 - 主页
- C++ 库 - <fstream>
- C++ 库 - <iomanip>
- C++ 库 - <ios>
- C++ 库 - <iosfwd>
- C++ 库 - <iostream>
- C++ 库 - <istream>
- C++ 库 - <ostream>
- C++ 库 - <sstream>
- C++ 库 - <streambuf>
- C++ 库 - <原子>
- C++ 库 - <复杂>
- C++ 库 - <异常>
- C++ 库 - <功能>
- C++ 库 - <限制>
- C++ 库 - <语言环境>
- C++ 库 - <内存>
- C++ 库 - <新>
- C++ 库 - <数字>
- C++ 库 - <正则表达式>
- C++ 库 - <stdexcept>
- C++ 库 - <字符串>
- C++ 库 - <线程>
- C++ 库 - <元组>
- C++ 库 - <类型信息>
- C++ 库 - <实用程序>
- C++ 库 - <valarray>
C++ 库 - <限制>
介绍
它是一种数字限制类型,提供有关库编译的特定平台中算术类型(整型或浮点型)属性的信息。
宣言
以下是 std::numeric_limits 的声明。
template <class T> numeric_limits;
C++11
template <class T> numeric_limits;
参数
T - 它是一种类。
例子
在下面的 std::numeric_limits 示例中。
#include <limits> #include <iostream> int main() { std::cout << "type\tlowest type\thighest type\n"; std::cout << "int\t" << std::numeric_limits<int>::lowest() << '\t' << std::numeric_limits<int>::max() << '\n'; std::cout << "float\t" << std::numeric_limits<float>::lowest() << '\t' << std::numeric_limits<float>::max() << '\n'; std::cout << "double\t" << std::numeric_limits<double>::lowest() << '\t' << std::numeric_limits<double>::max() << '\n'; }
示例输出应该是这样的 -
type lowest type highest type int -2147483648 2147483647 float -3.40282e+38 3.40282e+38 double -1.79769e+308 1.79769e+308
模板实例化
C++98 的基本算术类型应该是这样的 -
基本算术类型 | |
---|---|
整数类型 | bool |
char |
|
wchar_t |
|
signed char |
|
short int |
|
int |
|
long int |
|
unsigned char |
|
unsigned short int |
|
unsigned int |
|
unsigned long int |
|
浮点类型 | float |
double |
|
long double |
C++11 的基本算术类型应该是这样的 -
基本算术类型 | |
---|---|
整数类型 | bool |
char |
|
char16_t |
|
char32_t |
|
wchar_t |
|
signed char |
|
short int |
|
int |
|
long int |
|
long long int |
|
unsigned char |
|
unsigned short int |
|
unsigned int |
|
unsigned long int |
|
unsigned long long int |
|
浮点类型 | float |
double |
|
long double |
会员
成员 | 类型 | 财产 |
---|---|---|
is_specialized | bool |
它true 适用于所有人(即那些数字限制是专门的)。以及false 所有其他类型。 |
分钟() | 时间 | 它是最小有限值。 对于具有非标准化的浮点类型(可变数量的指数位):最小正标准化值。 相当于CHAR_MIN,SCHAR_MIN,SHRT_MIN,INT_MIN,LONG_MIN,LLONG_MIN,FLT_MIN,BL_MIN,LDBL_MIN或 |
最大限度() | 时间 | 它是最大有限值。 相当于字符最大值,SCHAR_MAX,UCHAR_MAX,SHRT_MAX,USHRT_MAX,INT_MAX,UINT_MAX,长_最大,ULONG_MAX,LLONG_MAX,ULLONG_MAX,UINT_LEAST16_MAX,UINT_LEAST32_MAX,最大FLT,最大DBL_MAX或者LDBL_MAX,取决于类型。 |
最低() | 时间 | 它是最小有限值。(自 C++11 起) 对于整数类型:与分钟()。 对于浮点类型:取决于实现;一般来说,负数最大限度()。 |
数字 | 整数 | 它适用于整数类型:表示形式中非符号位(基数)的数量。 对于浮点类型:尾数中的位数(以基数为基数)(相当于FLT_MANT_DIG,DBL_MANT_DIG或者LDBL_MANT_DIG)。 |
数字10 | int |
它是可以不改变地表示的数字位数(以十进制为基数)。 相当于FLT_DIG,DBL_DIG或者LDBL_DIG对于浮动类型。 |
最大位数10 | int |
它是一些数字(以十进制为基础),需要确保不同的值始终能够区分。 |
有符号 | bool |
true 如果类型有符号。 |
是整数 | bool |
true 如果类型是整数。 |
是_精确的 | bool |
true 如果类型使用精确的表示。 |
基数 | int |
它适用于整数类型:表示的基数。 对于浮点类型:表示形式的指数的基数(相当于FLT_RADIX)。 |
厄普西隆() | 时间 | 它是一个机器 epsilon(1 和可表示的大于 1 的最小值之间的差)。 相当于FLT_EPSILON,DBL_EPSILON或者LDBL_EPSILON对于浮动类型。 |
round_error() | 时间 | 它测量最大舍入误差。 |
最小指数 | int |
它是最小负整数值,基数提高后可 相当于FLT_MIN_EXP,DBL_MIN_EXP或者LDBL_MIN_EXP对于浮动类型。 |
最小指数10 | int |
它是一个最小负整数值,10 的该次方可以生成标准化浮点数。 相当于FLT_MIN_10_EXP,DBL_MIN_10_EXP或者LDBL_MIN_10_EXP对于浮动类型。 |
最大指数 | int |
它是一个最大整数值,基数提高后可 相当于FLT_MAX_EXP,DBL_MAX_EXP或者LDBL_MAX_EXP对于浮动类型。 |
最大指数10 | int |
它是一个最大整数值,10 的该次幂会生成一个标准化的有限浮点数。 相当于FLT_MAX_10_EXP,DBL_MAX_10_EXP或者LDBL_MAX_10_EXP对于浮动类型。 |
有无穷大 | bool |
true 如果该类型具有正无穷大的表示。 |
有_安静_NaN | bool |
true 如果该类型具有安静(非信号)“Not-a-Number”的表示。 |
has_signaling_NaN | bool |
true 如果该类型具有信令“Not-a-Number”的表示。 |
有分值 | 浮动分值样式 | 它是非规格化值(具有可变数量的指数位的表示)。类型可以具有以下任何枚举值 - denorm_absent,如果它不允许非规范化值。 denorm_present,如果它允许非规范化值。 denorm_不确定,如果在编译时不确定。 |
有分值损失 | bool |
true 如果准确性损失被检测为非规范化损失,而不是不精确的结果。 |
无穷() | 时间 | 它代表正无穷大(如果可用)。 |
安静的_NaN() | 时间 | 它代表安静(非信令)“Not-a-Number”(如果可用)。 |
signalling_NaN() | 时间 | 它代表信号“Not-a-Number”(如果可用)。 |
denorm_min() | 时间 | 最小正非规格化值。 它适用于不允许非规范化值的类型:与 相同 |
is_iec559 | bool |
IEC-559 类型始终具有有无穷大,有_安静_NaN和has_signaling_NaN设置为 |
有界 | bool |
true 如果该类型表示的值集是有限的。 |
是模 | bool |
true 如果类型是模数。如果可以将两个正数相加并得到返回到第三个较小的数的结果,则该类型是模数类型。 |
陷阱 | bool |
true 是否为该类型实现了陷阱。 |
之前的微小性 | bool |
true 如果在舍入之前检测到微小。 |
圆形样式 | 浮动圆形样式 | 这是一种圆角风格。类型可以具有以下任何枚举值 - 向零舍入,如果它向零舍入。 舍入到最近的,如果四舍五入到最接近的可表示值。 向无穷大舍入,如果四舍五入到无穷大。 向负无穷大舍入,如果它向负无穷大舍入。 轮不确定,如果舍入样式在编译时无法确定。 |
对于上述所有非基本算术类型的类型,使用默认模板定义 -
C++98
template <class T> class numeric_limits { public: static const bool is_specialized = false; static T min() throw(); static T max() throw(); static const int digits = 0; static const int digits10 = 0; static const bool is_signed = false; static const bool is_integer = false; static const bool is_exact = false; static const int radix = 0; static T epsilon() throw(); static T round_error() throw(); static const int min_exponent = 0; static const int min_exponent10 = 0; static const int max_exponent = 0; static const int max_exponent10 = 0; static const bool has_infinity = false; static const bool has_quiet_NaN = false; static const bool has_signaling_NaN = false; static const float_denorm_style has_denorm = denorm_absent; static const bool has_denorm_loss = false; static T infinity() throw(); static T quiet_NaN() throw(); static T signaling_NaN() throw(); static T denorm_min() throw(); static const bool is_iec559 = false; static const bool is_bounded = false; static const bool is_modulo = false; static const bool traps = false; static const bool tinyness_before = false; static const float_round_style round_style = round_toward_zero; };
C++11
template <class T> class numeric_limits { public: static constexpr bool is_specialized = false; static constexpr T min() noexcept { return T(); } static constexpr T max() noexcept { return T(); } static constexpr T lowest() noexcept { return T(); } static constexpr int digits = 0; static constexpr int digits10 = 0; static constexpr bool is_signed = false; static constexpr bool is_integer = false; static constexpr bool is_exact = false; static constexpr int radix = 0; static constexpr T epsilon() noexcept { return T(); } static constexpr T round_error() noexcept { return T(); } static constexpr int min_exponent = 0; static constexpr int min_exponent10 = 0; static constexpr int max_exponent = 0; static constexpr int max_exponent10 = 0; static constexpr bool has_infinity = false; static constexpr bool has_quiet_NaN = false; static constexpr bool has_signaling_NaN = false; static constexpr float_denorm_style has_denorm = denorm_absent; static constexpr bool has_denorm_loss = false; static constexpr T infinity() noexcept { return T(); } static constexpr T quiet_NaN() noexcept { return T(); } static constexpr T signaling_NaN() noexcept { return T(); } static constexpr T denorm_min() noexcept { return T(); } static constexpr bool is_iec559 = false; static constexpr bool is_bounded = false; static constexpr bool is_modulo = false; static constexpr bool traps = false; static constexpr bool tinyness_before = false; };