関数へのポインタ
C++において、以下の関数へのポインタは、Cの関数へのポインタとの互換性があり、呼び出し規約が同じであれば直接の相互運用が可能である。
クラスに属さない名前空間レベルのグローバル関数(フリー関数)
クラスの静的メンバー関数
一方で、クラスの非静的メンバー関数へのポインタは互換性がない。また、非静的メンバー関数へのポインタを経由した関数の呼び出しには、そのクラスのインスタンスが必要となる。
C++では関数への参照を定義することもできるが、非静的メンバー関数への参照を定義することはできない。
C++では関数テンプレートの述語 (predicate) として通例関数オブジェクト (functor) あるいはラムダ式 (lambda expression) が渡されるが、関数ポインタを渡すことも可能である。ただし、関数オブジェクトやラムダ式のほうがコンパイラ最適化によるインライン化が期待できるため好まれる。なお、ラムダ式はC++11以降で標準化された機能であるが、Boost C++ライブラリのBoost.Lambdaを利用することで、C++03以前でもラムダ式を利用することができる。
また、C++11以降ではtypedefの代わりにusingを使うこともできる。typedefよりもusingのほうがいくらか分かりやすい構文になっている。
下記は上記の糖衣構文である。