C++STL---<limits>
C++ <limits> 头文件:
<limits> 头文件是 C++ 标准库中用于获取各种数据类型的数值范围、精度等信息的工具。它通过模板类 std::numeric_limits 提供了对基本数据类型(如 int、float、double 等)的详细属性查询功能。通过 std::numeric_limits<T>,开发者可以获取类型 T 的最小值、最大值、是否为有符号类型、是否支持无穷大、是否为整数类型等信息。例如,std::numeric_limits<int>::max() 返回 int 类型的最大值,std::numeric_limits<double>::epsilon() 返回 double 类型的机器精度。该头文件在需要处理数值边界或进行跨平台开发时非常有用,能够帮助开发者编写更健壮和可移植的代码。
1. numeric_limits<T> 概述
核心功能
- 类型极值查询:获取类型的最大值(
max())和最小值(min()或lowest())。 - 浮点特性检测:支持无穷大(
infinity())、非数值(quiet_NaN())等特殊值的操作。 - 底层属性分析:判断类型是否带符号(
is_signed)、是否为整数类型(is_integer)等。 - 平台适配支持:检测溢出是否取模(
is_modulo)、浮点舍入模式(round_style)等。
头文件与基本用法
#include <limits>
using namespace std;int main() {cout << "int 最大值: " << numeric_limits<int>::max() << endl; // 输出 2147483647return 0;
}
2. 核心成员函数
2.1 极值查询
min() 与 max()
- 功能:获取类型的最小值和最大值。
- 适用类型:所有算术类型(整数、浮点、字符等)。
- 示例:
cout << "int 最小值: " << numeric_limits<int>::min() << endl; // -2147483648 cout << "float 最大值: " << numeric_limits<float>::max() << endl; // 3.40282e+38
lowest()(C++11 新增)
- 功能:返回类型的最小有限值(对浮点类型更准确)。
- 示例:
cout << "float 最小有限值: " << numeric_limits<float>::lowest() << endl; // -3.40282e+38
2.2 浮点类型专用
epsilon()
- 功能:返回浮点类型的精度(1 与最小可表示大于 1 的值的差)。
- 示例:
cout << "double 精度: " << numeric_limits<double>::epsilon() << endl; // 2.22045e-16
infinity() 与 quiet_NaN()
- 功能:
infinity():获取正无穷大(需has_infinity为true)。quiet_NaN():获取非信号型非数值(NaN)。
- 示例:
if (numeric_limits<float>::has_infinity) {float inf = numeric_limits<float>::infinity();cout << "正无穷大: " << inf << endl; // 输出 inf } float nan = numeric_limits<float>::quiet_NaN();
2.3 类型属性检测
| 成员函数/常量 | 功能描述 | 示例(int 类型) |
|---|---|---|
digits | 类型的有效位数(不含符号位) | numeric_limits<char>::digits → 7 |
is_signed | 类型是否带符号 | numeric_limits<unsigned>::is_signed → false |
is_integer | 是否为整数类型 | numeric_limits<double>::is_integer → false |
3. 底层特性与平台适配
3.1 溢出行为检测
is_modulo
- 功能:检测类型溢出时是否按模运算(通常无符号类型为
true)。 - 应用场景:安全数值运算设计。
- 示例:
if (numeric_limits<int>::is_modulo) {cout << "int 溢出会回绕" << endl; } else {cout << "int 溢出行为未定义" << endl; // 典型输出 }
3.2 浮点标准合规性
is_iec559
- 功能:检测浮点类型是否符合 IEEE 754 标准。
- 示例:
if (numeric_limits<float>::is_iec559) {cout << "float 符合 IEEE 754" << endl; // 常见平台为 true }
round_style
- 功能:返回浮点舍入模式(如
round_to_nearest)。 - 示例:
auto style = numeric_limits<double>::round_style; if (style == round_to_nearest) {cout << "使用四舍五入模式" << endl; }
4. 实际应用场景
4.1 防止数值溢出
template<typename T>
T safe_add(T a, T b) {if ((b > 0) && (a > numeric_limits<T>::max() - b)) {throw overflow_error("加法溢出");}return a + b;
}
4.2 浮点数判等(考虑精度误差)
bool almost_equal(double x, double y) {return abs(x - y) < numeric_limits<double>::epsilon() * max(abs(x), abs(y));
}
4.3 动态类型特性检查
template<typename T>
void print_numeric_info() {if constexpr (numeric_limits<T>::is_signed) {cout << "类型范围: [" << numeric_limits<T>::min() << ", " << numeric_limits<T>::max() << "]\n";} else {cout << "类型范围: [0, " << numeric_limits<T>::max() << "]\n";}
}
5. 与 C 风格宏的对比
优势
- 类型安全:避免
INT_MAX误用于long等类型错误。 - 泛型友好:模板代码中可统一接口,无需类型判断。
- 扩展性:支持用户自定义类型的特化。
对比示例
// C 风格
int max_int = INT_MAX; // 需要包含 <climits>// C++ 风格
int max_int = numeric_limits<int>::max(); // 类型明确
6. 扩展:自定义类型特化
用户可为自定义类型特化 numeric_limits 以支持标准查询接口。
示例
class Decimal {int value; // 以整型存储固定小数
public:Decimal(int val) : value(val) {}
};namespace std {
template<>
class numeric_limits<Decimal> {
public:static constexpr bool is_specialized = true;static Decimal max() { return Decimal(9999); }static Decimal min() { return Decimal(-9999); }// 其他必要成员定义...
};
} // namespace std
7. 注意事项
- 非算术类型:默认未特化的类或字符串类型无法使用
numeric_limits。 - 编译时常量:所有成员均为
constexpr,可用于模板元编程。 - C++11 扩展:优先使用
lowest()而非min()获取浮点类型的最小有限值。 - 平台差异:
is_modulo等属性可能因编译器和硬件不同而变化。
相关文章:
C++STL---<limits>
C <limits> 头文件: <limits> 头文件是 C 标准库中用于获取各种数据类型的数值范围、精度等信息的工具。它通过模板类 std::numeric_limits 提供了对基本数据类型(如 int、float、double 等)的详细属性查询功能。通过 std::nume…...
一键安装Mysql部署脚本之Linux在线安装Mysql,脚本化自动化执行服务器部署(附执行脚本下载)
相关链接 一键安装Redis部署脚本之Linux在线安装Redis一键安装Mysql部署脚本之Linux在线安装Mysql一键安装JAVA部署脚本之Linux在线安装JDK一键安装Nginx部署脚本之Linux在线安装NginxNavicat最新版(17)详细安装教程Xshell客户端免费版无需注册XFtp客户端免费版无需注册 前言…...
ES、OAS、ERP、电子政务、企业信息化(高软35)
系列文章目录 ES、OAS、ERP、电子政务、企业信息化 文章目录 系列文章目录前言一、专家系统(ES)二、办公自动化系统(OAS)三、企业资源规划(ERP)四、典型信息系统架构模型1.政府信息化和电子政务2.企业信息…...
文生图开源模型发展史(2014-2025年)
文生图开源模型的发展历程是一段充满技术革新、社区生态繁荣与商业化竞争的多维度演进史。 一、技术萌芽期(2014-2020年) 核心突破 2014年:GAN(生成对抗网络)诞生,首次实现数据驱动式图像生成࿰…...
OA办公系统自动渗透测试过程
目录 一、下载环境源码 二、部署环境 三、测试 XSS漏洞 SQL注入 文件上传漏洞 一、下载环境源码 OA源码打包地址: https://download.csdn.net/download/weixin_43650289/90434502?spm=1001.2014.3001.5503 二、部署环境...
Python标准库【os】5 文件和目录操作2
文章目录 8 文件和目录操作8.7 浏览目录下的内容8.8 查看文件或目录的信息8.9 文件状态修改文件标志位文件权限文件所属用户和组其它 8.10 浏览Windows的驱动器、卷、挂载点8.11 系统配置信息 os模块提供了各种操作系统接口。包括环境变量、进程管理、进程调度、文件操作等方面…...
[代码规范]接口设计规范
一个优雅的接口要如何设计?有哪些设计规范可以遵循? 下面抛砖引玉,分享一些规范。 目录 1、RESTful API 设计最佳实践 2、Shneiderman 的 8 条黄金法则 3、Nielsen 的 10 条启发式规则 1、RESTful API 设计最佳实践 一共18条,参考…...
什么是最终一致性,它对后端系统的意义是什么
最终一致性(Eventual Consistency)是分布式系统中的一种一致性模型。与传统的强一致性模型不同,最终一致性并不要求系统在任何时刻都保持一致,而是保证在足够的时间后,所有节点的数据最终会达到一致的状态。换句话说,系统允许短时间内出现数据的不一致性,但最终会通过某…...
Unity学习笔记之——ugui的性能优化
在Unity中UI优化的核心问题就是重绘和批处理之间的平衡 一、Canvas优化要点 1.优化原因: (1)Unity为了性能优化,会合并Canvas下的所有元素; (2)如果把所有面板放到一个Canvas下,会…...
Python接口自动化中操作Excel文件的技术方法
在Python接口自动化测试中,操作Excel文件是一项常见且关键的技术需求。Excel作为数据存储和数据分析的重要工具,在自动化测试中通常用于存储测试用例、测试数据以及测试结果。通过Python操作Excel,可以大大提高测试的效率和灵活性。以下是一些…...
[Windows] 免费电脑控制手机软件 极限投屏_正式版_3.0.1 (QtScrcpy作者开发)
[Windows] 极限投屏_正式版 链接:https://pan.xunlei.com/s/VOKJf8Z1u5z-cHcTsRpSd89tA1?pwdu5ub# 新增功能(Future): 支持安卓14(Supports Android 14)提高投屏成功率(Improve the success rate of mirror)加快投屏速度(Accelerate screen mirrorin…...
游戏引擎学习第131天
仓库:https://gitee.com/mrxiao_com/2d_game_3 运行游戏并识别我们的小问题 今天的工作重点是对游戏引擎进行架构优化,特别是针对渲染和多线程的部分。目前,我们的目标是让地面块在独立线程上进行渲染,以提高性能。在此过程中,我…...
Visual Studio Code集成MarsCode AI
Visual Studio Code集成MarsCode AI 1、搜索MarsCode AI 安装包 2、点击install安装即可 小编这里已经安装过了 3、登录自己的账号 点击链接,注册账号 https://www.marscode.cn/events/s/i5DRGqqo/ 4、登录后可以自己切换模型...
partner‘127.0.0.1:3200‘ not reached
在SAP虚拟机中,如果LRPSAP 0显示黄色,通常表示服务启动异常或存在配置问题。以下是一些可能的处理方法: 检查主机文件配置 确保主机文件(hosts)中已正确配置SAP服务的域名解析。例如,添加以下内容到hosts文…...
蓝桥备赛(六)- C/C++输入输出
一、OJ题目输入情况汇总 OJ(online judge) 接下来会有例题 , 根据一下题目 , 对这些情况进行分析 1.1 单组测试用例 单在 --> 程序运行一次 , 就处理一组 练习一:计算 (ab)/c 的值 B2009 计算 (ab)/c …...
Flume
Flume安装配置 使用的三台主机名称分别为bigdata1,bigdata2,bigdata3。所使用的安装包名称按自己的修改,安装包可去各大官网上下载 1.解压 将Master节点Flume安装包解压到/opt/module目录下 tar -zxvf /opt/software/apache-flume-1.9.0-bi…...
Java 大视界 -- Java 大数据中的时间序列数据异常检测算法对比与实践(103)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
三次握手内部实现原理
socket()创建一个新的套接字 int socket(int domain, int type, int protocol); 参数: domain:地址族,如 AF_INET(IPv4),AF_INET6(IPv6) type:套接字类型&…...
ES from size聚合查询10000聚合查询,是每个分片先聚合,再统计。还是所有节点查询1万条后,再聚合
在 Elasticsearch 中,聚合查询 的执行过程是 分布式 的,Elasticsearch 会先在每个分片(shard)上执行本地聚合,然后再在协调节点(coordinating node)上对所有分片的聚合结果进行 全局汇总。具体过…...
JAVA实战开源项目:安康旅游网站(Vue+SpringBoot) 附源码
本文项目编号 T 098 ,文末自助获取源码 \color{red}{T098,文末自助获取源码} T098,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
告别网络调试焦虑:用STM32CubeMX+FreeRTOS,给LAN8720A和LWIP做个“健康检查”与性能小优化
STM32网络子系统深度优化:从连通性测试到工业级稳定性实战 当你熬夜调试的嵌入式设备终于能Ping通时,那种喜悦感堪比程序员第一次写出"Hello World"。但很快你会发现,真正的挑战才刚刚开始——那些在演示视频里永远不会出现的诡异断…...
2026届最火的六大AI辅助写作方案实际效果
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 旨在系统阐述大规模语言模型创新架构以及训练方法的DeepSeek系列论文,其核心贡献…...
GHelper:华硕笔记本性能优化的轻量解决方案 - 告别Armoury Crate臃肿体验
GHelper:华硕笔记本性能优化的轻量解决方案 - 告别Armoury Crate臃肿体验 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Fl…...
DeepAnalyze数据结构优化:提升大规模数据处理性能
DeepAnalyze数据结构优化:提升大规模数据处理性能 1. 引言 当你面对几十GB甚至TB级别的数据集时,是不是经常遇到处理速度慢、内存占用高的问题?DeepAnalyze作为一款强大的AI数据分析工具,在处理大规模数据时,数据结构…...
项目介绍 MATLAB实现基于概率路图法(PRM)进行无人机三维路径规划的详细项目实例(含模型描述及部分示例代码) 专栏近期有大量优惠 还请多多点一下关注 加油 谢谢 你的鼓励是我前行的动力 谢谢支持
MATLAB实现基于概率路图法(PRM)进行无人机三维路径规划的详细项目实例 更多详细内容可直接联系博主本人 或者访问对应标题的完整博客或者文档下载页面(含完整的程序,GUI设计和代码详解) 随着无人机技术的快速发展&…...
告别重复造轮子,用快马平台一键生成OpenClaw高效工具模块
最近在做一个机器人控制项目,需要集成OpenClaw机械爪模块。传统开发方式需要从零开始写大量重复代码,效率很低。后来尝试用InsCode(快马)平台生成核心模块,效果出乎意料的好。这里分享下具体实现思路和优化点: 安全初始化模块设计…...
“证死你,证伟我”——波普尔“证伪主义”是逻辑诈骗,1+1=2才是真正的科学
“证死你,证伟我”——波普尔“证伪主义”是逻辑诈骗,112才是真正的科学摘要本文作者以技术专家立场,将波普尔证伪主义定性为“逻辑原罪”与“学术诈骗”。核心指控为六个字:“证死你”——用“不可证伪”剥夺完美理论(…...
绿色软件制作:TranslucentTB便携版开发全攻略
绿色软件制作:TranslucentTB便携版开发全攻略 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 在Windows个性化定制领域&#…...
Windows 10下SQLMap安装配置全攻略(附Python环境搭建)
Windows 10下SQLMap实战指南:从Python环境搭建到高级配置 在渗透测试和安全研究领域,SQLMap无疑是数据库安全检测的瑞士军刀。这款开源工具能够自动检测和利用SQL注入漏洞,支持几乎所有主流数据库系统。但对于Windows用户,特别是刚…...
基于YOLOV8的车辆检测系统:快速上手与实用功能
基于YOLOV8的车辆检测系统 基于深度学习的车辆检测系统有数据集 模型已经训练好 直接用即可 报告 30r 就是售价 包搭配环境 远程运行跑通程序 本项目已经训练好模型,配置好环境可直接使用,运行效果见图像(可找我要演示视频) 项…...
