当前位置: 首页 > news >正文

C++STL---<limits>

C++ <limits> 头文件:

<limits> 头文件是 C++ 标准库中用于获取各种数据类型的数值范围、精度等信息的工具。它通过模板类 std::numeric_limits 提供了对基本数据类型(如 intfloatdouble 等)的详细属性查询功能。通过 std::numeric_limits<T>,开发者可以获取类型 T 的最小值、最大值、是否为有符号类型、是否支持无穷大、是否为整数类型等信息。例如,std::numeric_limits<int>::max() 返回 int 类型的最大值,std::numeric_limits<double>::epsilon() 返回 double 类型的机器精度。该头文件在需要处理数值边界或进行跨平台开发时非常有用,能够帮助开发者编写更健壮和可移植的代码。


1. numeric_limits<T> 概述

核心功能

  1. 类型极值查询:获取类型的最大值(max())和最小值(min()lowest())。
  2. 浮点特性检测:支持无穷大(infinity())、非数值(quiet_NaN())等特殊值的操作。
  3. 底层属性分析:判断类型是否带符号(is_signed)、是否为整数类型(is_integer)等。
  4. 平台适配支持:检测溢出是否取模(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_infinitytrue)。
    • 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_signedfalse
is_integer是否为整数类型numeric_limits<double>::is_integerfalse

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 风格宏的对比

优势

  1. 类型安全:避免 INT_MAX 误用于 long 等类型错误。
  2. 泛型友好:模板代码中可统一接口,无需类型判断。
  3. 扩展性:支持用户自定义类型的特化。

对比示例

// 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. 注意事项

  1. 非算术类型:默认未特化的类或字符串类型无法使用 numeric_limits
  2. 编译时常量:所有成员均为 constexpr,可用于模板元编程。
  3. C++11 扩展:优先使用 lowest() 而非 min() 获取浮点类型的最小有限值。
  4. 平台差异is_modulo 等属性可能因编译器和硬件不同而变化。

相关文章:

C++STL---<limits>

C <limits> 头文件&#xff1a; <limits> 头文件是 C 标准库中用于获取各种数据类型的数值范围、精度等信息的工具。它通过模板类 std::numeric_limits 提供了对基本数据类型&#xff08;如 int、float、double 等&#xff09;的详细属性查询功能。通过 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、电子政务、企业信息化 文章目录 系列文章目录前言一、专家系统&#xff08;ES&#xff09;二、办公自动化系统&#xff08;OAS&#xff09;三、企业资源规划&#xff08;ERP&#xff09;四、典型信息系统架构模型1.政府信息化和电子政务2.企业信息…...

文生图开源模型发展史(2014-2025年)

文生图开源模型的发展历程是一段充满技术革新、社区生态繁荣与商业化竞争的多维度演进史。 一、技术萌芽期&#xff08;2014-2020年&#xff09; 核心突破 2014年&#xff1a;GAN&#xff08;生成对抗网络&#xff09;诞生&#xff0c;首次实现数据驱动式图像生成&#xff0…...

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模块提供了各种操作系统接口。包括环境变量、进程管理、进程调度、文件操作等方面…...

[代码规范]接口设计规范

一个优雅的接口要如何设计&#xff1f;有哪些设计规范可以遵循&#xff1f; 下面抛砖引玉&#xff0c;分享一些规范。 目录 1、RESTful API 设计最佳实践 2、Shneiderman 的 8 条黄金法则 3、Nielsen 的 10 条启发式规则 1、RESTful API 设计最佳实践 一共18条&#xff0c;参考…...

什么是最终一致性,它对后端系统的意义是什么

最终一致性(Eventual Consistency)是分布式系统中的一种一致性模型。与传统的强一致性模型不同,最终一致性并不要求系统在任何时刻都保持一致,而是保证在足够的时间后,所有节点的数据最终会达到一致的状态。换句话说,系统允许短时间内出现数据的不一致性,但最终会通过某…...

Unity学习笔记之——ugui的性能优化

在Unity中UI优化的核心问题就是重绘和批处理之间的平衡 一、Canvas优化要点 1.优化原因&#xff1a; &#xff08;1&#xff09;Unity为了性能优化&#xff0c;会合并Canvas下的所有元素&#xff1b; &#xff08;2&#xff09;如果把所有面板放到一个Canvas下&#xff0c;会…...

Python接口自动化中操作Excel文件的技术方法

在Python接口自动化测试中&#xff0c;操作Excel文件是一项常见且关键的技术需求。Excel作为数据存储和数据分析的重要工具&#xff0c;在自动化测试中通常用于存储测试用例、测试数据以及测试结果。通过Python操作Excel&#xff0c;可以大大提高测试的效率和灵活性。以下是一些…...

[Windows] 免费电脑控制手机软件 极限投屏_正式版_3.0.1 (QtScrcpy作者开发)

[Windows] 极限投屏_正式版 链接&#xff1a;https://pan.xunlei.com/s/VOKJf8Z1u5z-cHcTsRpSd89tA1?pwdu5ub# 新增功能(Future)&#xff1a; 支持安卓14(Supports Android 14)提高投屏成功率(Improve the success rate of mirror)加快投屏速度(Accelerate screen mirrorin…...

游戏引擎学习第131天

仓库:https://gitee.com/mrxiao_com/2d_game_3 运行游戏并识别我们的小问题 今天的工作重点是对游戏引擎进行架构优化&#xff0c;特别是针对渲染和多线程的部分。目前&#xff0c;我们的目标是让地面块在独立线程上进行渲染&#xff0c;以提高性能。在此过程中&#xff0c;我…...

Visual Studio Code集成MarsCode AI

Visual Studio Code集成MarsCode AI 1、搜索MarsCode AI 安装包 2、点击install安装即可 小编这里已经安装过了 3、登录自己的账号 点击链接&#xff0c;注册账号 https://www.marscode.cn/events/s/i5DRGqqo/ 4、登录后可以自己切换模型...

partner‘127.0.0.1:3200‘ not reached

在SAP虚拟机中&#xff0c;如果LRPSAP 0显示黄色&#xff0c;通常表示服务启动异常或存在配置问题。以下是一些可能的处理方法&#xff1a; 检查主机文件配置 确保主机文件&#xff08;hosts&#xff09;中已正确配置SAP服务的域名解析。例如&#xff0c;添加以下内容到hosts文…...

蓝桥备赛(六)- C/C++输入输出

一、OJ题目输入情况汇总 OJ&#xff08;online judge&#xff09; 接下来会有例题 &#xff0c; 根据一下题目 &#xff0c; 对这些情况进行分析 1.1 单组测试用例 单在 --> 程序运行一次 &#xff0c; 就处理一组 练习一&#xff1a;计算 (ab)/c 的值 B2009 计算 (ab)/c …...

Flume

Flume安装配置 使用的三台主机名称分别为bigdata1&#xff0c;bigdata2&#xff0c;bigdata3。所使用的安装包名称按自己的修改&#xff0c;安装包可去各大官网上下载 1.解压 将Master节点Flume安装包解压到/opt/module目录下 tar -zxvf /opt/software/apache-flume-1.9.0-bi…...

Java 大视界 -- Java 大数据中的时间序列数据异常检测算法对比与实践(103)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

三次握手内部实现原理

socket()创建一个新的套接字 int socket(int domain, int type, int protocol)&#xff1b; 参数&#xff1a; domain&#xff1a;地址族&#xff0c;如 AF_INET&#xff08;IPv4&#xff09;&#xff0c;AF_INET6&#xff08;IPv6&#xff09; type&#xff1a;套接字类型&…...

ES from size聚合查询10000聚合查询,是每个分片先聚合,再统计。还是所有节点查询1万条后,再聚合

在 Elasticsearch 中&#xff0c;聚合查询 的执行过程是 分布式 的&#xff0c;Elasticsearch 会先在每个分片&#xff08;shard&#xff09;上执行本地聚合&#xff0c;然后再在协调节点&#xff08;coordinating node&#xff09;上对所有分片的聚合结果进行 全局汇总。具体过…...

JAVA实战开源项目:安康旅游网站(Vue+SpringBoot) 附源码

本文项目编号 T 098 &#xff0c;文末自助获取源码 \color{red}{T098&#xff0c;文末自助获取源码} T098&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...