2011-12-07 11 views
4

私は、関数プロトタイプはパラメータに関連付けられた名前を持つ必要はないことを理解しています。たとえば:関数定義内の名前のないパラメータ

void* foo(void*) { std::cerr << "Hello World!" << std::endl; } 

はなぜこの作品は、どのようにあなたが今までの使用を作ることができるん:

void foo(int, std::string); 

私はあなたがが、関数定義で同じことを行うことができることを最近知りに興味を持っていました名前のないパラメータですか?これが許可されている理由はありますか(レガシーインターフェイスやそれらの回線に沿ったものなど)。

答えて

7

引数を使用するつもりがない場合、これはコンパイラが警告を出さないようにする良い方法です。

これは、実際にインターフェイスを満足させるというコンテキストで最も頻繁に出てくることです。例えば。基本クラスのメソッドをオーバーライドしている可能性がありますが、パラメータは使用しません。

+4

実装が変更され、引数が不要になりましたが、ABI /古いクライアントを中断したくありません。 –

+0

別の一般的な状況は、コールバックおよび/または関数ポインタです。 – IronMensan

+0

ありがとうございます:)意味があります。 –

関連する問題