関数ポインターとラムダ式はどちらも C でコード ブロックをカプセル化するための手法であり、異なります。関数ポインタは関数のメモリ アドレスへの定数ポインタであるのに対し、ラムダ式は外部変数をキャプチャするより柔軟な構文を持つ匿名関数です。関数ポインターは型安全性と低オーバーヘッドが必要なシナリオに適しており、ラムダ式は匿名性と外部変数のキャプチャが必要なシナリオに適しています。
はじめに
C では、関数ポインターとラムダ式ラムダ式はどちらもコードのブロックをカプセル化するための手法ですが、構文と使用法が異なります。
関数ポインタ
関数ポインタは、関数のメモリ アドレスを指す定数ポインタです。これにより、関数を引数として渡したり、データ構造に保存したりすることができます。
ラムダ式
ラムダ式は、特別な構文を使用して定義された匿名関数です。これらは、コールバックまたはフィルターとして渡すことができる小さなコード ブロックを作成するためによく使用されます。
#比較
関数ポインタ | ラムダ式 | |
---|---|---|
int (*func)(int)
|
[](int x) { return x * x; }
|
|
非匿名性 | 匿名性##キャプチャ | 外部変数をキャプチャできません |
タイプ セーフティ | タイプ セーフティ | |
実用的なケース |
void sort(int arr[], int size, int (*comp)(int, int)) {
// 使用函数指针作为比较函数进行排序
...
}
int compareAsc(int a, int b) {
return a - b;
}
int main() {
int arr[] = {5, 2, 8, 3, 1};
sort(arr, 5, compareAsc);
...
}
std::vector<int> numbers = {1, 2, 3, 4, 5};
auto even = [](int x) { return x % 2 == 0; };
std::vector<int> evenNumbers = std::remove_if(numbers.begin(), numbers.end(), even);
...
関数ポインタとラムダ式は、C でコード ブロックをカプセル化するために使用されます。便利なツールです。関数ポインターは型安全性と低いオーバーヘッドが必要なシナリオに適していますが、ラムダ式は匿名性と外部変数のキャプチャが必要なシナリオに適しています。
以上がC++ 関数ポインターはラムダ式とどのように比較対照されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。