7

重複の可能性:
C++ で「(void) new」とはどういう意味ですか?

私は C++ に詳しくなく、メソッド シグネチャの直後の行がわかりません。

int EAN13Reader::decodeMiddle(Ref<BitArray> row,
        int startGuardBegin,
        int startGuardEnd,
        std::string& resultString)
{
    (void)startGuardBegin;
    ...
}

なに(void)startGuardBegin;?メソッド呼び出し?

4

3 に答える 3

4

これは、引数が未使用であることをコンパイラに通知するため、「未使用の引数」の警告は表示されません。

GCC などのコンパイラint startGuardBegin __attribute__ ((unused))には通常、これを示す他の方法 ( ) がありますが、通常は関数ヘッダーで何らかの方法でキャストしますが、へのキャスト(void)はコンパイラ固有の機能に依存しません。

于 2012-06-18T08:44:20.070 に答える
3

それは何もしません。

startGuardBegin代わりに、リーダーと、関数で使用されていない静的分析ツールに対して、これが問題なく予期されることを指定します。

静的分析ツールは、パラメータが関数で使用されていない場合に警告を発します。これは、バグの可能性を示しているためです。パラメーターを署名から削除できない場合 (デバッグ コードで使用されている場合、または互換性や将来の動作のために必要な場合)、効果のないステートメントでパラメーターを使用すると、警告が回避されます。ただし、ステートメントで使用するだけでstartGuardBegin;別の警告がトリガーされるため (値が破棄されるため)、それをvoid防ぐためにキャストします。

于 2012-06-18T08:45:31.207 に答える
1

キャスト先voidは、未使用の変数および保存されていない戻り値または式に対するコンパイラの警告を抑制するために使用されます。

Standard(2003)は§5.2.9/4で次のように述べています。

任意の式を明示的にタイプ「cvvoid」に変換できます。式の値は破棄されます。

したがって、(C ++スタイルの方法で)書くことができます:

//suppressing unused variable warnings
static_cast<void>(unusedVar);

//suppressing return value warnings
static_cast<void>(fn());

//suppressing unsaved expressions
static_cast<void>(a + b * 10);
static_cast<void>( x &&y || z);      
static_cast<void>( m | n + fn()); 

すべてのフォームが有効です。私は通常それを次のように短くします:

//suppressing  expressions
(void)(unusedVar);
(void)(fn());
(void)(x &&y || z);

それも大丈夫です。

于 2012-06-18T09:09:58.290 に答える