一 简介

头文件<limits>

template <class T> numeric_limits;

Provides information about the properties of arithmetic types (either integral or floating-point) in the specific platform for which the library compiles.

This class template is specialized for every fundamental arithmetic type, with its members describing the properties of type T. This template shall not be specialized for any other type.

即:提供算术类型(整型或者浮点型)的属性信息。该类模板提供了每个基本算术类型的特化,类成员描述类型的属性,成员和成员函数均为静态;而其他类型并没有进行特化,将使用默认的模板定义

二 基本算术类型

C++98:

fundamental arithmetic types
integral types bool
char
wchar_t
signed char
short int
int
long int
unsigned char
unsigned short int
unsigned int
unsigned long int
floating point types float
double
long double

C++11:

fundamental arithmetic types
integral types 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
floating point types float
double
long double

三 默认模板定义

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;static constexpr float_round_style round_style = round_toward_zero;
};

四 举例

#include <limits>
#include <iostream>int main() {std::cout << "type\tlowest()\tmin()\t\tmax()\n\n";std::cout << "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';std::cout << "int\t"<< std::numeric_limits<int>::lowest() << '\t'<< std::numeric_limits<int>::min() << '\t'<< std::numeric_limits<int>::max() << '\n';std::cout << "float\t"<< std::numeric_limits<float>::lowest() << '\t'<< std::numeric_limits<float>::min() << '\t'<< std::numeric_limits<float>::max() << '\n';std::cout << "double\t"<< std::numeric_limits<double>::lowest() << '\t'<< std::numeric_limits<double>::min() << '\t'<< std::numeric_limits<double>::max() << '\n';getchar();
}

结果:

五 参考

std::numeric_limits

C++ std::numeric_limits相关推荐

  1. boost::multiprecision模块将 std::numeric_limits 用作 multiprecision.qbk 上的多精度文档片段的示例

    boost::multiprecision模块将 std::numeric_limits 用作 multiprecision.qbk 上的多精度文档片段的示例 实现功能 C++实现代码 实现功能 bo ...

  2. C++/C++11中std::numeric_limits的使用

    在C/C++11中,std::numeric_limits为模板类,在库编译平台提供基础算术类型的极值等属性信息,取代传统C语言,所采用的预处理常数.比较常用的使用是对于给定的基础类型用来判断在当前系 ...

  3. max std value 宏_【转载】:【C++跨平台系列】解决STL的max()与numeric_limits::max()和VC6 min/max 宏冲突问题...

    多年以前,Microsoft 幹了一件比 #define N 3 還要蠢的蠢事,那就是在 放入了 min/max 這兩個宏命令(macros). #define max(a,b)            ...

  4. C++数值极限numeric_limits

    一般来说,数值类型的极值是一个与平台相关的特性.C++标准程序库通过template numeric_limits提供这些极值,取代传统C语言所采用的预处理常数.你仍然可以使用后者,其中整数常数定义于 ...

  5. std::setprecision、std::ios::fixed使用说明

    单独使用std::setprecision 如下: #include <iostream> #include <iomanip> #include <cmath> ...

  6. std::chrono时间库详解

    主要时间类型 std::ratio<num, den> 定义分式(std::ratio模板请参考<C++新标准之std::ratio>),例如: std::ratio<6 ...

  7. C++语言中std::array的神奇用法总结,你需要知道!

    摘要:在这篇文章里,将从各个角度介绍下std::array的用法,希望能带来一些启发. td::array是在C++11标准中增加的STL容器,它的设计目的是提供与原生数组类似的功能与性能.也正因此, ...

  8. numeric_limits

    numeric_limits <int> 我们常讲,int:是有符号整型,而 unsigned int:是无符号整型,可此话怎讲呢,自然是值域(range),也即数值范围不同. std:: ...

  9. isnan函数返回值c语言,C++ std::isnan等函数的使用

    C和C++11标准提供了类似于isnan.isfinite.isinf.isnormal.fpclassify分别用于判断是非数(NaN)值.有限制.无穷值.正常数值等. 今天在使用Modbus读取设 ...

最新文章

  1. 【转载】中文输入法下onKeyPress不能触发的问题
  2. 数字图像处理实验(11):PROJECT 05-02,Noise Reduction Using a Median Filter
  3. NYOJ 203 三国志(Dijkstra+贪心)
  4. 120天的烧脑只为孩子设计一套教具~
  5. 前端学习(2850):简单秒杀系统学习之绝对定位
  6. 九、ES6的箭头函数
  7. 把握数据库发展趋势 DBA应如何避免“踩坑”?
  8. python打包程序出错_pyinstaller 打包exe,出错,换了个简单的.py文件也不行
  9. 认识Spring核心容器IoC/DI
  10. visual studio 让代码看起来更舒服
  11. Java和C#的区别
  12. FreeTextBox使用详解(FTBv3-1-6)
  13. java 关键字 val,java关键字final用法知识点
  14. 百度Apollo 2.0 车辆控制算法之LQR控制算法解读
  15. Office 365网络链接概览(三)--专线express route
  16. Git同时配置github和gitee
  17. 实训一#1.7F1方程式冠军
  18. 任正非:《一江春水向东流》
  19. 报错提示:应用程序无法启动,因为应用程序的并行配置不正确,有关详细信息,请参阅应用程序时间日志,或使用命令行sxstrace.exe工具。有效解决方法
  20. 武汉经开区2021年知识产权资助(奖励)资金开始申报

热门文章

  1. 机械祭天法力无边:练习3.4:编写一段程序读入两个字符串,比较其是否相等并输出结果。如果不相等,输出较大的那个字符串。改写上述程序,比较输入的两个字符串是否等长,如果不等长,输出长度较大的那个字符串。
  2. CPU与RISC-V ISA架构
  3. Oauth 第三方授权登陆 facebook google twitter instagram
  4. 顺序栈的基本操作(C++实现)
  5. Signing for ‘xxx‘ requires a development team.
  6. Ubuntu系统如何搜索要安装的软件包
  7. 虚拟信用卡绑定paypal验证的教程
  8. 氨基-八聚乙二醇Amino-PEG8-alcohol,352439-37-3
  9. 引进国外SD-WAN技术,凌锐蓝信为企业提供跨境网络连接服务
  10. office文档***