作者:朱金灿

来源:http://blog.csdn.net/clever101

在C/C++11中,std::numeric_limits为模板类,在库编译平台提供基础算术类型的极值等属性信息,取代传统C语言所采用的预处理常数(具体参考:C++常用数值类型的值范围的宏定义)。其中使用例子如下:

#include <limits>
#include <iostream>/* reference: http://www.cplusplus.com/reference/limits/numeric_limits/ https://msdn.microsoft.com/en-us/library/c707ct0t.aspx
*/
int test_numeric_limits_1()
{  std::cout << std::boolalpha;  std::cout << "Minimum value for int: " << std::numeric_limits<int>::min() << std::endl;  std::cout << "Maximum value for int: " << std::numeric_limits<int>::max() << std::endl;  std::cout << "int is signed: " << std::numeric_limits<int>::is_signed << std::endl;  std::cout << "Non-sign bits in int: " << std::numeric_limits<int>::digits << std::endl;  std::cout << "int has infinity: " << std::numeric_limits<int>::has_infinity << std::endl;  std::cout << "Minimum value for float: " << std::numeric_limits<float>::min() << std::endl; // min returns the smallest positive value the type can encode, not the lowest  std::cout << "Lowest value for float: " << std::numeric_limits<float>::lowest() << std::endl; // the lowest value  std::cout << "Maximum value for float: " << std::numeric_limits<float>::max() << std::endl;  std::cout << "float is signed: " << std::numeric_limits<float>::is_signed << std::endl;  std::cout << "Non-sign bits in float: " << std::numeric_limits<float>::digits << std::endl;  std::cout << "float has infinity: " << std::numeric_limits<float>::has_infinity << std::endl;  std::cout << "Minimum value for unsigned short: " << std::numeric_limits<unsigned short>::min() << std::endl;  std::cout << "Maximum value for unsigned short: " << std::numeric_limits<unsigned short>::max() << std::endl;  std::cout << "is_specialized(float): " << std::numeric_limits<float>::is_specialized << std::endl;  std::cout << "is_integer(float): " << std::numeric_limits<float>::is_integer << std::endl;  std::cout << "is_exact(float): " << std::numeric_limits<float>::is_exact << std::endl;  std::cout << "is_bounded(float): " << std::numeric_limits<float>::is_bounded << std::endl;  std::cout << "is_modulo(float): " << std::numeric_limits<float>::is_modulo << std::endl;  std::cout << "is_iec559(float): " << std::numeric_limits<float>::is_iec559 << std::endl;  std::cout << "digits10(float): " << std::numeric_limits<float>::digits10 << std::endl;  std::cout << "radix(float): " << std::numeric_limits<float>::radix << std::endl;  std::cout << "min_exponent(float): " << std::numeric_limits<float>::min_exponent << std::endl;  std::cout << "max_exponent(float): " << std::numeric_limits<float>::max_exponent << std::endl;  std::cout << "min_exponent10(float): " << std::numeric_limits<float>::min_exponent10 << std::endl;  std::cout << "max_exponent10(float): " << std::numeric_limits<float>::max_exponent10 << std::endl;  std::cout << "epsilon(float): " << std::numeric_limits<float>::epsilon() << std::endl;  std::cout << "round_style(float): " << std::numeric_limits<float>::round_style << std::endl;  std::cout << "The smallest nonzero denormalized value for float: "  << std::numeric_limits<float>::denorm_min()<< std::endl;  std::cout << "The difference between 1 and the smallest value greater than 1 for float: "  << std::numeric_limits<float>::epsilon()<< std::endl;  std::cout << "Whether float objects allow denormalized values: "  << std::numeric_limits<float>::has_denorm << std::endl;  std::cout << "Whether float objects can detect denormalized loss: "  << std::numeric_limits<float>::has_denorm_loss << std::endl;  std::cout << "Whether float objects have quiet_NaN: "  << std::numeric_limits<float>::has_quiet_NaN << std::endl;  std::cout << "Whether float objects have a signaling_NaN: "  << std::numeric_limits<float>::has_signaling_NaN << std::endl;  std::cout << "The base for type float is:  "  << std::numeric_limits<float>::radix << std::endl;  std::cout << "The maximum rounding error for type float is:  "  << std::numeric_limits<float>::round_error() << std::endl;  std::cout << "The rounding style for a double type is: "  << std::numeric_limits<double>::round_style << std::endl;  std::cout << "The signaling NaN for type float is:  "  << std::numeric_limits<float>::signaling_NaN() << std::endl;  std::cout << "Whether float types can detect tinyness before rounding: "  << std::numeric_limits<float>::tinyness_before << std::endl;  std::cout << "Whether float types have implemented trapping: "  << std::numeric_limits<float>::traps << std::endl;  return 0;
} 

但是在使用std::numeric_limits时经常会出现一个编译错误:

1>main.cpp(473):error C2059: 语法错误:“::”

1>  main.cpp(474): warning C4003: “min”宏的实参不足。

网上查了一下资料,了解了这个错误的原因:windows.h中定义了min宏,<limits >中也有这个定义,两者冲突了。windows.h中Microsoft定义了min/max两个宏,< limits >中定义的min/max两个宏虽然在自己的命名空间中,可还是被“污染”了。因此要避免冲突,就得先屏蔽windows.h中定义的min宏,具体做法是在所有包含头文件前面(注意是所有)增加下面的预处理语句:

#ifndef NOMINMAX                      #define NOMINMAX
#endif

参考文献:

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

2. opencv编程解决warning C4003: “max”宏的实参不足

std::numeric_limits的一个使用注意事项相关推荐

  1. std::uniform_real_distribution的一个bug引发的服务器崩溃

    文章目录 前言 崩溃问题 std::uniform_real_distribution<> 的bug bug 重现方法 总结 前言 近日发生一次线上游戏服务器宕机问题,通过日志和core文 ...

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

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

  3. C++ std::numeric_limits

    一 简介 头文件<limits> template <class T> numeric_limits; Provides information about the prope ...

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

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

  5. std::set作为一个有序集合

    摘要:std::set作为标准库的一个关联容器,实现内部元素进行了排序,使用这特性可以对一组元素进行插入排序.std::set最初的设计是完成数学中"集合"的概念,它提供的接口也是 ...

  6. 从零开始写一个Android待办事项ToDoListApp

    概述 初衷 作为一个程序员,每天要处理的事项越来越多,有时一件事情花费了太多的时间而忽略了还有其他事情等着处理.开始是借助Microsoft ToDo 来记录下待办事项,时不时的去看一下,勾选掉已经完 ...

  7. oracle定时任务会漂移,定时任务与手动执行脚本时的一个重要注意事项

    今天在linux环境下做了一个定时任务,用java程序到oracle中查询数据, 手动执行脚本没有问题,但是定时任务执行时却一直报错: - java.sql.SQLException: ORA-006 ...

  8. [c++]std::vector erase 檫除注意事项

    std::vector<int> deletes; //从后向前删除for(int i = 0;i<res.size();i++) //遍历所有目标{if((res[i].x + r ...

  9. 阿里OCR接入一个小注意事项

    前面的平台注册 服务开通直接略过,直接讲要注意的两个点 1: 引入这个ocr_ui模块,他里面有这几个架构,你对应的的主工程也要做这几个架构的适配.不然有些手机会报错 2:获取token方式 通过ht ...

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

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

最新文章

  1. 国内maven库镜像(阿里云)
  2. (互联网)Yahoo邮箱的改版
  3. 使用create-react-app遇到问题解决方案汇总
  4. Flume实操(二)【实时读取本地文件到HDFS案例】
  5. c语言打印数组元素_C程序打印元素差为0或1的子集数
  6. 一个通用的makefile写法,自动推导文件的依赖关系
  7. Volley网络请求框架简析——Android网络请求框架(三)
  8. 杭电1466计算直线的交点数
  9. 基础总结篇之八:创建及调用自己的ContentProvider
  10. linux未找到make命令,linux中无make命令的问题(make: *** 没有指明目标并且找不到 makefile及make命令安装方法)...
  11. Flask 蓝图(Blueprint)
  12. 计算机全息图的制作与在线,基于Matlab的计算全息图的制作与数字再现的研究精选.doc...
  13. windows10如何注销
  14. uview ui与element ui的区别和用法
  15. VBA增加sheet,重名时自动命名
  16. 20、Theos越狱调试Wallet
  17. 计算机学识水平自我评价,计算机毕业自我鉴定范文
  18. PyMC3 概率编程入门
  19. 22.扩展.等保测评相关实务
  20. eclipse中注释快捷键

热门文章

  1. itext java代码生成PDF文档
  2. DSF 洛谷 P1294 高手去散步
  3. Pygame教程系列一:快速入门篇
  4. psnr--峰值信噪比
  5. 成都拓嘉启远电商:拼多多单号批量导入如何操作
  6. umijs有什么好处_UmiJS
  7. 18个基于Web的代码开发编辑器
  8. 网际风全推数据接口_网际风千钧版 飞狐配套全推接口最新版(2013年5月10更新)...
  9. 修改app的名字和图标
  10. COM口(DB9) 连 RJ45 线序