Boost开发指南-4.2ignore_unused
ignore_unused
编写代码的过程中有时会出现一些暂时用不到但又必须保留的变量,GCC等编译器会对此发出警告,使用-Wunused可以关闭这些警告消息,不过这也有可能导致潜在的隐患。古老的办法是使用(void)var的形式来“使用”一下变量,但这种方法含义不明确,不利于维护。
Boost程序库的 ignore_unused 组件就这个问题给出了更好的解决方案。它原本是proto库里的一个小工具,因为在Boost很多其他库中都被使用,所以在增强了功能后被“扶正”。
ignore_unused位于名字空间boost,为了使用ignore_unused库,需要包含头文件<boost/core/ignore_unused.hpp>,即
#include <boost/core/ignore_unused.hpp>
using namespace boost;
基本用法
ignore_unused的实现非常地简单,几乎什么也没有做:
template <typename...Ts>
inline void ignore_unused(Ts const&...)
{}
ignore_unused使用可变参数模板,可以支持任意数量、任意类型的变量,把它们作为函数的参数“使用”了一下,“骗”过了编译器,达到了与(void)var 完全相同的效果。但它的命名更清晰,写法也更简单,而且由于是inline函数,完全没有运行时的效率损失。
假设我们有如下的一个函数,出于某种原因,它没有使用参数x,并且声明了一个暂未使用的变量:
int func(int x, int y)
{int i; //未使用的变量ireturn y; //未使用函数参数x
}
GCC在编译代码时会报出警告信息:
In function 'int func(int, int) " :
warning : unused variable 'i'[一Wunused-variable]At global scope :
warning: unused parameter 'x,[-Wunused-parameter]
int func(int x, int y)
使用ignore_unused我们可以显式地忽略这些变量,从而轻易地消除这些警告信息:
int func(int x, int y)
{int i;ignore_unused(x, i); //相当于(void)x;(void)i;return y;
}
显然,ignore_unused 比 C风格的(void) var要更容易理解,无需多余的注释,代码自身说明了一切。
模板用法
ignore_unused库还可以作用于未使用的局部类型定义,它的另一种形式是:
template<typename...Ts>
inline void ignore_unused() //注意没有函数参数列表
{}
ignore_unused的模板用法与函数用法类似,但它不需要函数参数,而是在模板参数列表里写出要忽略的类型。
例如下面的函数内部定义了一个typedef,然后用ignore_unused忽略之:
void func2()
{typedef int result_type; //暂未使用的类型定义ignore_unused<result_type>(); //忽略未使用的类型定义
}
代码示例
#include <boost/core/ignore_unused.hpp>
using namespace boost;//
int func(int x, int y)
{int i;ignore_unused(x, i);return y;
}//
void func2()
{typedef int result_type;ignore_unused<result_type>();
}int main()
{//func(1, 2);
}
相关文章:
Boost开发指南-4.2ignore_unused
ignore_unused 编写代码的过程中有时会出现一些暂时用不到但又必须保留的变量,GCC等编译器会对此发出警告,使用-Wunused可以关闭这些警告消息,不过这也有可能导致潜在的隐患。古老的办法是使用(void)var的形式来“使用”一下变量,…...
【Mybatis】XML映射文件
目录 11.3XML映射文件 1.select 2.insert、update、delete 3.Sql 4.parameters(参数) 5.resultMap 6.resultMap 使用示例 (1)在先前创建的数据库stu中创建表student 2,并插入若干条数据,代码如下: (2)创建工程mybatis_ResultMap_demo。 (…...
11.2【MyBatis】主配置文件
目录 11.2【MyBatis】主配置文件 1.properties(属性) 2.settings(设置) 3.typeAliases(别名) 4.typeHandlers类型处理器 5.objectFactory 对象工厂 6.plugins(插件) 7.environments (配置环境) 8.mappers (映射器) 11.2【MyBatis】主配置文件 MyBatis的 …...
linuxARM裸机学习笔记(2)----汇编LED灯实验
MX6ULL 的 IO IO的复用功能 这里的只使用了低五位,用来配置io口,其中bit0~bit3(MUX_MODE)就是设置 GPIO1_IO00 的复用功能的,GPIO1_IO00 一共可以复用为 9种功能 IO,分别对应 ALT0~ALT8。每种对应了不同的功能 io的属性配置 HY…...
用C语言实现插入排序算法
1.设计思路 用插入排序对长度为n的待排序数组A进行排序的伪代码(在代码中,A中元素的数目n用A.length来表示)。 伪代码如下: INSERTION-SORT(A) for j2 to A.length:keyA[j] //将A[j]插入已排序序列A[1..j-1]ij-1while i>0…...
2023 电赛E题--可能会出现的问题以及解决方法
2023年电赛E题报告模板(K210版)--可直接使用 本文链接:2023年电赛E题报告模板(K210版)--可直接使用_皓悦编程记的博客-CSDN博客 解决激光笔在黑色区域无法识别 本文链接: 2023 电赛 E 题 激光笔识别有误-…...
Demystifying Prompts in Language Models via Perplexity Estimation
Demystifying Prompts in Language Models via Perplexity Estimation 原文链接 Gonen H, Iyer S, Blevins T, et al. Demystifying prompts in language models via perplexity estimation[J]. arXiv preprint arXiv:2212.04037, 2022. 简单来说就是作者通过在不同LLM和不同…...
WEB集群——http、tomcat
1. 简述静态网页和动态网页的区别。 2. 简述 Webl.0 和 Web2.0 的区别。 3. 安装tomcat8,配置服务启动脚本,部署jpress应用。 1. 简述静态网页和动态网页的区别。 1)、静态网页 (1)、什么是静态网页 请求响应信息&…...
Socks5代理:网络安全与爬虫之利器
一、Socks5代理:简介与工作原理 Socks5代理,全称为Socket Secure 5代理,是一种允许用户通过代理服务器进行网络连接的技术。它是Socks协议的最新版本,在网络安全和数据传输方面有着显著的优势。 Socks5代理与其他代理的不同之处在…...
如何兼容低版本浏览器
如何兼容低版本浏览器 分为三个部分来说 HTML 低版本浏览器无法识别新增的HTML5元素,如果要兼容这部分浏览器,需要做以下处理: 对于非可替换元素,比如article、section、header、footer等,这种元素虽然低版本浏览器不识…...
【雕爷学编程】MicroPython动手做(39)——机器视觉之图像基础2
MixPY——让爱(AI)触手可及 MixPY布局 主控芯片:K210(64位双核带硬件FPU和卷积加速器的 RISC-V CPU) 显示屏:LCD_2.8寸 320*240分辨率,支持电阻触摸 摄像头:OV2640,200W像素 扬声器&#…...
gitlab搭建
回到目录 GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 Web 服务。 Gitlab 是被广泛使用的基于 git 的开源代码管理平台, 基于 Ruby on Rails 构建, 主要针对软件开发过程中产生的代码和文档进行管理,…...
JMeter 的使用
文章目录 1. JMeter下载2. JMeter的使用2.1 JMeter中文设置2.2 JMeter的使用2.2.1 创建线程组2.2.2 HTTP请求2.2.3 监听器 1. JMeter下载 官网地址 https://jmeter.apache.org/download_jmeter.cgi https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.2.zip 下载解…...
Java语言 Iterator 如何装换成 List
迭代器如何逆向转换成List集合 在 Java 中,迭代器(Iterator)是一种用于遍历集合中元素的对象,它提供了一种简单而一致的方式来访问集合中的元素,而不需要暴露集合内部的结构。如果我们需要将一个迭代器逆向转换成 Lis…...
国产GOWIN实现低成本实现CSI MIPI转换DVP
CSI MIPI转换DVP,要么就是通用IC操作,如龙讯芯片和索尼芯片,但是复杂的寄存器控制器实在开发太累。对于FPGA操作,大部分都是用xilinx的方案,xilinx方案成本太高,IP复杂。 而用国产GOWIN已经实现了直接mipi …...
Typescript第六章 类型进阶(类型之间的关系,全面性检查,对象类型进阶,函数类型进阶,条件类型等)
文章目录 第六章 类型进阶6.1 类型之间的关系6.1.1 子类型和超类型6.1.2 型变结构和数组型变函数型变 6.1.3 可赋值性6.1.4 类型拓宽const类型多余属性检查 6.1.5 细化辨别并集类型 6.2 全面性检查6.3对象类型进阶6.3.1 对象类型的类型运算符“键入”运算符keyof运算符 6.3.2 R…...
kernel32.dll如何修复,快速解决kernel32.dll缺失的方法
Kernel32.dll是Windows操作系统中一个重要的系统文件,对于系统的正常运行至关重要。然而,由于各种原因,用户可能会遇到kernel32.dll文件的缺失问题。今天小编就来给大家详细的介绍一下kernel32.dll这个文件,并且详细的介绍一下ker…...
初始化前端项目配置 eslint、prettier、husky 等等
每次新项目都要重新配置一遍,有点麻烦,记录一下。 一、配置 ESLint 1.1 核心配置 执行 npm init eslint/config 命令进行初始化,根据提示一路下一步即可,完成后会自动生成 eslintrc 文件并安装相关依赖。 1.2 React 编译模式配…...
嵌入式存储器为AI的实现提供了实现架构
近年来,大脑启发式计算机领域的研究活动获得了巨大的发展。主要原因是试图超越传统的冯诺依曼架构的局限性,后者越来越受存储器-逻辑通信的带宽和等待时间的局限性的影响。在神经形态架构中,内存是分布式的,可以与逻辑共定位。鉴于…...
iOS开发-格式化时间显示刚刚几分钟前几小时前等
iOS开发-格式化时间显示刚刚几分钟前几小时前等 在开发中经常遇到从服务端获取的时间戳,需要转换显示刚刚、几分钟前、几小时前、几天前、年月日等格式。 主要用到了NSCalendar、NSDateComponents这两个类 NSString *result nil;NSCalendarUnit components (NSC…...
BililiveRecorder API接口完全参考:Webhook和RESTful接口详解
BililiveRecorder API接口完全参考:Webhook和RESTful接口详解 【免费下载链接】BililiveRecorder 录播姬 | mikufans 生放送录制 项目地址: https://gitcode.com/gh_mirrors/bi/BililiveRecorder BililiveRecorder(录播姬)是一款强大的…...
DamoFD开源模型企业级运维:Prometheus监控指标+Grafana看板配置
DamoFD开源模型企业级运维:Prometheus监控指标Grafana看板配置 在实际生产环境中,部署一个轻量级但高精度的人脸检测模型只是第一步。真正决定它能否长期稳定服务的,是背后一整套可观测性体系——尤其是对GPU资源消耗、推理延迟、请求吞吐、…...
MedGemma Medical Vision Lab镜像免配置:Docker一键运行+Web界面自动加载MedGemma权重
MedGemma Medical Vision Lab镜像免配置:Docker一键运行Web界面自动加载MedGemma权重 想快速体验一个能看懂X光片、CT影像的AI助手吗?今天介绍的MedGemma Medical Vision Lab,让你无需任何复杂的模型下载和配置,就能在本地运行一…...
Vue3后台管理系统开发革命:如何用vue-admin-box实现零门槛企业级应用
Vue3后台管理系统开发革命:如何用vue-admin-box实现零门槛企业级应用 【免费下载链接】vue-admin-box vue3,vite,element-plus中后台管理系统,集成四套基础模板,大量可利用组件,模板页面 项目地址: https://gitcode.com/gh_mirr…...
Python @overload 装饰器深度解析
一、引言:Python中的"伪重载"机制 在传统静态类型语言如Java、C中,函数重载(Function Overloading)是指允许定义多个同名函数,通过参数的数量、类型或顺序区分调用方式,实现不同输入对应不同处理…...
传统编辑升级AI内容编辑师后稿酬与效率提升对比
在内容生产进入“AI重构”的深水区,传统编辑向AI内容编辑师转型已成为行业趋势,而专业的AI技能认证如CAIE注册人工智能工程师认证,正成为助力这一转型的重要支撑。AI工具的深度应用不仅重塑了编辑的工作模式,更在工作效率与稿酬收…...
用STM32F407的FSMC总线给FPGA当外挂RAM?一个实战项目带你打通软硬件
STM32与FPGA的FSMC总线实战:打造高性能异构内存扩展方案 在嵌入式系统开发中,内存资源常常成为性能瓶颈。当STM32需要处理大规模数据时,内部SRAM可能捉襟见肘。本文将展示如何利用STM32F407的FSMC总线,将FPGA内部RAM无缝扩展为MCU…...
深度实战:使用zhihu-api构建知乎数据分析系统的完整指南
深度实战:使用zhihu-api构建知乎数据分析系统的完整指南 【免费下载链接】zhihu-api Unofficial API for zhihu. 项目地址: https://gitcode.com/gh_mirrors/zhi/zhihu-api 在当今数据驱动的时代,获取和分析社交媒体平台数据已成为开发者、数据分…...
2026年怎么安装OpenClaw?6分钟阿里云零门槛安装及百炼Coding Plan指南
2026年怎么安装OpenClaw?6分钟阿里云零门槛安装及百炼Coding Plan指南。本文面向零基础用户,完整说明在轻量服务器与本地Windows11、macOS、Linux系统中部署OpenClaw(Clawdbot)的流程,包含环境配置、服务启动、Skills集…...
cv_resnet101_face-detection效果实测:高精度人脸定位与多场景适应
cv_resnet101_face-detection效果实测:高精度人脸定位与多场景适应 最近在做一个智能相册管理的项目,需要从海量照片里快速、准确地找出所有人脸。试了好几个开源模型,要么对小脸、侧脸识别不准,要么在光线复杂或者有遮挡的情况下…...
