関数オブジェクトとラムダ式はどちらも、匿名関数を作成するためのツールです。主な違いは次のとおりです。 構文: 関数オブジェクトはクラス定義を使用しますが、ラムダ式は [] 構文を使用します。スコープ: 関数オブジェクトはクラスの外で使用できますが、ラムダ式は定義のスコープに限定されます。キャプチャ: 関数オブジェクトは外部変数をキャプチャできませんが、ラムダ式はキャプチャ リストを通じてキャプチャできます。オーバーヘッド: 関数オブジェクト作成のオーバーヘッドは低く、ラムダ式のオーバーヘッドは高くなります。再利用性: 関数オブジェクトは通常再利用可能で、ラムダ式は通常 1 回限りの使用です。
STL 関数オブジェクトと C ラムダ式の違い
関数オブジェクトとラムダ式はどちらも C ツールでの作成に使用されます匿名関数の場合。これらには類似点がありますが、重要な違いもあります。
構文
[]
構文定義を使用します。 スコープ
#Capture
整数の配列があり、特定の条件を満たす最初の要素 (たとえば、最初の要素) を見つけたいとします。要素が 10 を超えています)。
関数オブジェクトの使用:class GreaterThan10 {
public:
bool operator()(int x) { return x > 10; }
};
int main() {
int arr[] = {1, 5, 7, 12, 14};
auto found = find_if(begin(arr), end(arr), GreaterThan10());
if (found != end(arr)) {
cout << "First number greater than 10: " << *found << endl;
}
return 0;
}
int main() {
int arr[] = {1, 5, 7, 12, 14};
auto found = find_if(begin(arr), end(arr), [](int x) { return x > 10; });
if (found != end(arr)) {
cout << "First number greater than 10: " << *found << endl;
}
return 0;
}
この例では、ラムダ式は次のとおりです。整数が 10 より大きいかどうかを判断する無名関数を作成します。
以上がSTL 関数オブジェクトと C++ ラムダ式の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。