関数自体の代わりに関数へのポインタを使用することの本当の利点は何ですか? 実行が速くなりますか?それとも、別の関数に渡されたときに便利ですか?
5 に答える
これにより、実行時にビジネス ロジックのコンポーネントを「選択」できます。これは、コンパイル時に使用する関数の選択に制限される関数名のハードコーディングとは対照的です。
関数ポインターは、関数を変数に格納し、それらを他の関数に渡す方法です。「通常の関数」に勝る「利点」はありません。それらはまったく異なるものであり、それらを比較しようとしても意味がありません。それは、「変数と if ステートメントのどちらが優れているか?」と尋ねるようなものです。
関数ポインターは、他の方法では利用できない機能を提供します。
実際、関数のポインターを渡すのは、関数自体を呼び出すよりも少し遅くなります。しかし、違いは非常に小さいため、ほとんど効果がありません。
ジョンが言ったように、プログラムのある部分から別の部分に関数を渡すことができる場合、場合によっては柔軟性が向上します。
関数ポインターは、どの関数を正確に呼び出すかわからない多くの状況で使用されます。例を見てみましょう。配列をソートしたい。そのためには、一般的なソート関数を作成します。ここで、この並べ替え関数は配列要素を比較する必要があります。ただし、配列には任意の要素 (int、float、文字列、ユーザー定義型など) を含めることができるため、この並べ替え関数で要素を比較する方法を説明します。したがって、この場合、順序決定関数を引数としてこの並べ替え関数に渡すことができ、それに基づいて配列を並べ替えることができます。また、別の方法でも役立ちます。文字列の配列 (数字の文字列) を並べ替えたいとしましょう。数値順またはアルファベット順で並べ替えることができます。
この場合、数値的にソートしたい場合は、int に変換された文字列の値に基づいて比較する比較関数を渡すことができます。等々...