無視_未使用
コードを記述するプロセスでは、一時的に使用されていない変数がいくつか存在しますが、予約する必要があります。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);
}