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

4.2 Boost 库工具类 ignore_unused 的使用

        编写代码的过程中有时会出现一些暂时用不到但又必须保留的变量,GCC 等编译器会对此发出警告,使用"-Wunused"可以关闭这些警告消息,不过这也有可能导致潜在的隐患。古老的办法是使用"(void)var"的形式来"使用"一下变量,但这种方法含义不明确,不利于维护。

        Boost 程序库的 ignore_unused 组件就这个问题给出了更好的解决方案。它原本是 proto 库里的一个小工具,因为在很多其他组件中被使用,所以在增强了功能后被"扶正"。

        ignore_unused 位于名字空间 boost,需要包含的头文件如下:

#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,并且声明了一个暂未使用的变量 i:

#include <iostream>
#include <string>
#include <Windows.h>using namespace std;int func(int x, int y)
{int i;    //未使用的变量 ireturn y;    //未使用参数 x 的函数
}int main()
{cout << "Start" << endl;func(10, 12);cout << "End" << endl;system("pause");return 0;
}

        使用 ignore_unused 我们可以显式地忽略这些变量,从而轻易地消除这些警告信息:

#include <iostream>
#include <string>
#include <Windows.h>
#include <boost/core/ignore_unused.hpp>using namespace std;int func(int x, int y)
{int i;    //未使用的变量 iboost::ignore_unused(x, i);return y;    //未使用参数 x 的函数
}int main()
{cout << "Start" << endl;func(10, 12);cout << "End" << endl;system("pause");return 0;
}

        显然,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>();
}

http://www.dtcms.com/a/589965.html

相关文章:

  • 智能驾驶域控(ADCU)方案介绍
  • 关于我们的python日记本
  • 电子商城网站开发购物车网站联盟怎么做
  • 10、webgl 基本概念 + 坐标系统 + 立方体
  • 网站建设 类东莞网站建设方案外包
  • 小孩子和大人做的网站公司网站域名com好还是cn好
  • PostgreSQL 分区表实战:亿级订单表按时间拆分,查询提速 100 倍
  • 数字孪生如何落地
  • 4.1.8【2014统考真题】
  • 查询域名网站淮安淮阴网站建设
  • 智慧校园综合管理平台源码
  • 用Python识别图片中的文字(Tesseract OCR)
  • nvidia驱动安装(openEuler上安装T4驱动)
  • 网站开发 自学网上商城系统
  • 网站设计公司 中山搜狐三季度营收多少
  • 编程范式综论:从思维哲学到程序形态简论
  • 将C++对象暴露给QML两种的方法:注册为QML类型和设置为根上下文属性
  • SlaugFL论文阅读学习
  • 网站开发毕设ppt网站设计一般要求
  • PHP JSON 操作详解
  • 计算机操作系统:Shell 命令语言
  • layui表格数据居右
  • 建设银行的官方网站积分商场创业型企业网站模板
  • 怎么查看网站虚拟空间搭建网站需要哪些步骤
  • 通配符(二)【java】
  • 饿汉模式和懒汉模式
  • 南京凯盛建设集团官方网站深圳数据中心建设公司
  • 新版点微同城主题源码34.7+全套插件+小程序前后端 源文件
  • 房产中介网站建设进度慕枫网络科技有限公司
  • 周口建设网站的中英文网站好处