これが機能する主な理由は、 for_each () が実際には 3 番目の引数が関数であると想定していないためです。3 番目の引数は、適切な引数で呼び出すことができるものであると単純に想定しています。適切に定義されたオブジェクトは、機能と同様に機能し、多くの場合、機能よりも優れています。たとえば、関数へのポインターとして渡される関数をインライン化するよりも、クラスのアプリケーション演算子をインライン化する方が簡単です。その結果、関数オブジェクトは通常の関数よりも高速に実行されることがよくあります。アプリケーション演算子 (§11.9) を持つクラスのオブジェクトは、関数型オブジェクト、ファンクター、または単に関数オブジェクトと呼ばれます。
[Stroustrup、C++ 第 3 版、18.4-最後の段落]
operator()呼び出しは、実行時の関数呼び出しと同じだとずっと思っていました。通常の関数呼び出しとどう違うのですか?
通常の関数よりもアプリケーション演算子をインライン化する方が簡単なのはなぜですか?
関数呼び出しよりもどのように高速ですか?