未使用の戻り値を void にキャストするのはなぜですか?

デビッドの答えは、この関数が返すことを知っているが、明示的に無視していることを他の「開発者」に明示的に示すために、これの動機をほぼカバーしています。

これは、必要なエラー コードが常に処理されるようにする方法です。

C++ の場合、C スタイルのキャストを使用することを好むのは、おそらくこれだけだと思います。ここで完全な静的キャスト表記を使用するとやり過ぎに感じるからです。最後に、コーディング標準を検討している、またはコーディング標準を作成している場合は、オーバーロードされた演算子 (関数呼び出し表記を使用しない) の呼び出しもこれから除外する必要があることを明示的に述べるのも良い考えです:

class A {};
A operator+(A const &, A const &);

int main () {
  A a;
  a + a;                 // Not a problem
  (void)operator+(a,a);  // Using function call notation - so add the cast.

職場では、関数に戻り値があることを確認するためにこれを使用しますが、開発者はそれを無視しても安全だと主張しています。質問に C++ のタグを付けたので、static_cast を使用する必要があります :

static_cast<void>(fn());

コンパイラが戻り値を void にキャストする限り、ほとんど意味がありません。


これを行う本当の理由は、lint と呼ばれる C コードで使用されるツールにまでさかのぼります。

コードを分析して潜在的な問題を探し、警告と提案を発行します。関数が値を返し、それがチェックされなかった場合、 lint これが偶発的な場合に備えて警告します。 lint を黙らせる この警告で、呼び出しを (void) にキャストします .