Boost 開発ガイド - 4.2ignore_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 とまったく同じ効果を達成できる変数パラメータ テンプレートを使用します。ただし、命名はより明確で、記述方法はより単純であり、インライン関数であるため、実行時の効率が損なわれることはありません。

次のような関数があるとします。この関数は、何らかの理由で引数 x をとらず、まだ使用されていない変数を宣言しています。

int func(int x, int y)
{
    
    
    int i; //未使用的变量i
    return 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);
}

おすすめ

転載: blog.csdn.net/qq_36314864/article/details/132101033