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 国内…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...
Java并发编程实战 Day 11:并发设计模式
【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天,今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案,它们不仅提供了优雅的设计思路,还能显著提升系统的性能…...
stm32进入Infinite_Loop原因(因为有系统中断函数未自定义实现)
这是系统中断服务程序的默认处理汇编函数,如果我们没有定义实现某个中断函数,那么当stm32产生了该中断时,就会默认跑这里来了,所以我们打开了什么中断,一定要记得实现对应的系统中断函数,否则会进来一直循环…...