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

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 编写代码的过程中有时会出现一些暂时用不到但又必须保留的变量&#xff0c;GCC等编译器会对此发出警告&#xff0c;使用-Wunused可以关闭这些警告消息&#xff0c;不过这也有可能导致潜在的隐患。古老的办法是使用(void)var的形式来“使用”一下变量&#xff0c…...

【Mybatis】XML映射文件

目录 11.3XML映射文件 1.select 2.insert、update、delete 3.Sql 4.parameters(参数) 5.resultMap 6.resultMap 使用示例 (1)在先前创建的数据库stu中创建表student 2&#xff0c;并插入若干条数据&#xff0c;代码如下&#xff1a; (2)创建工程mybatis_ResultMap_demo。 (…...

11.2【MyBatis】主配置文件

目录 11.2【MyBatis】主配置文件 1.properties&#xff08;属性&#xff09; 2.settings(设置) 3.typeAliases(别名) 4.typeHandlers类型处理器 5.objectFactory 对象工厂 6.plugins(插件) 7.environments (配置环境) 8.mappers (映射器) 11.2【MyBatis】主配置文件 MyBatis的 …...

linuxARM裸机学习笔记(2)----汇编LED灯实验

MX6ULL 的 IO IO的复用功能 这里的只使用了低五位&#xff0c;用来配置io口&#xff0c;其中bit0~bit3(MUX_MODE)就是设置 GPIO1_IO00 的复用功能的&#xff0c;GPIO1_IO00 一共可以复用为 9种功能 IO&#xff0c;分别对应 ALT0~ALT8。每种对应了不同的功能 io的属性配置 HY…...

用C语言实现插入排序算法

1.设计思路 用插入排序对长度为n的待排序数组A进行排序的伪代码&#xff08;在代码中&#xff0c;A中元素的数目n用A.length来表示&#xff09;。 伪代码如下&#xff1a; INSERTION-SORT(A) for j2 to A.length:keyA[j] //将A[j]插入已排序序列A[1..j-1]ij-1while i>0…...

2023 电赛E题--可能会出现的问题以及解决方法

2023年电赛E题报告模板&#xff08;K210版&#xff09;--可直接使用 本文链接&#xff1a;2023年电赛E题报告模板&#xff08;K210版&#xff09;--可直接使用_皓悦编程记的博客-CSDN博客 解决激光笔在黑色区域无法识别 本文链接&#xff1a; 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&#xff0c;配置服务启动脚本&#xff0c;部署jpress应用。 1. 简述静态网页和动态网页的区别。 1&#xff09;、静态网页 &#xff08;1&#xff09;、什么是静态网页 请求响应信息&…...

Socks5代理:网络安全与爬虫之利器

一、Socks5代理&#xff1a;简介与工作原理 Socks5代理&#xff0c;全称为Socket Secure 5代理&#xff0c;是一种允许用户通过代理服务器进行网络连接的技术。它是Socks协议的最新版本&#xff0c;在网络安全和数据传输方面有着显著的优势。 Socks5代理与其他代理的不同之处在…...

如何兼容低版本浏览器

如何兼容低版本浏览器 分为三个部分来说 HTML 低版本浏览器无法识别新增的HTML5元素&#xff0c;如果要兼容这部分浏览器&#xff0c;需要做以下处理&#xff1a; 对于非可替换元素&#xff0c;比如article、section、header、footer等&#xff0c;这种元素虽然低版本浏览器不识…...

【雕爷学编程】MicroPython动手做(39)——机器视觉之图像基础2

MixPY——让爱(AI)触手可及 MixPY布局 主控芯片&#xff1a;K210&#xff08;64位双核带硬件FPU和卷积加速器的 RISC-V CPU&#xff09; 显示屏&#xff1a;LCD_2.8寸 320*240分辨率&#xff0c;支持电阻触摸 摄像头&#xff1a;OV2640&#xff0c;200W像素 扬声器&#…...

gitlab搭建

回到目录 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用 Git 作为代码管理工具&#xff0c;并在此基础上搭建起来的 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 中&#xff0c;迭代器&#xff08;Iterator&#xff09;是一种用于遍历集合中元素的对象&#xff0c;它提供了一种简单而一致的方式来访问集合中的元素&#xff0c;而不需要暴露集合内部的结构。如果我们需要将一个迭代器逆向转换成 Lis…...

国产GOWIN实现低成本实现CSI MIPI转换DVP

CSI MIPI转换DVP&#xff0c;要么就是通用IC操作&#xff0c;如龙讯芯片和索尼芯片&#xff0c;但是复杂的寄存器控制器实在开发太累。对于FPGA操作&#xff0c;大部分都是用xilinx的方案&#xff0c;xilinx方案成本太高&#xff0c;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操作系统中一个重要的系统文件&#xff0c;对于系统的正常运行至关重要。然而&#xff0c;由于各种原因&#xff0c;用户可能会遇到kernel32.dll文件的缺失问题。今天小编就来给大家详细的介绍一下kernel32.dll这个文件&#xff0c;并且详细的介绍一下ker…...

初始化前端项目配置 eslint、prettier、husky 等等

每次新项目都要重新配置一遍&#xff0c;有点麻烦&#xff0c;记录一下。 一、配置 ESLint 1.1 核心配置 执行 npm init eslint/config 命令进行初始化&#xff0c;根据提示一路下一步即可&#xff0c;完成后会自动生成 eslintrc 文件并安装相关依赖。 1.2 React 编译模式配…...

嵌入式存储器为AI的实现提供了实现架构

近年来&#xff0c;大脑启发式计算机领域的研究活动获得了巨大的发展。主要原因是试图超越传统的冯诺依曼架构的局限性&#xff0c;后者越来越受存储器-逻辑通信的带宽和等待时间的局限性的影响。在神经形态架构中&#xff0c;内存是分布式的&#xff0c;可以与逻辑共定位。鉴于…...

iOS开发-格式化时间显示刚刚几分钟前几小时前等

iOS开发-格式化时间显示刚刚几分钟前几小时前等 在开发中经常遇到从服务端获取的时间戳&#xff0c;需要转换显示刚刚、几分钟前、几小时前、几天前、年月日等格式。 主要用到了NSCalendar、NSDateComponents这两个类 NSString *result nil;NSCalendarUnit components (NSC…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...