再帰的ラムダを作成しようとして、自動関数の使用中にエラーが発生しました。ラムダの型を推測するためのキーワード。ただし、ラムダの型を std::function として明示的に宣言すると、コードは正常にコンパイルされました。
Auto Type Inference:
auto を使用する場合、コンパイラーは初期化に基づいてラムダの型を推測します。ただし、再帰的ラムダの場合、ラムダ クロージャはキャプチャしている型 (この場合は sum) を知る必要があります。ラムダの型はクロージャの型に依存し、クロージャはラムダの型に依存するため、これにより循環依存関係が作成されます。
明示的な型宣言:
ラムダの型を std::function
再帰関数:
修正されたコード セグメント:
std::function<int(int, int)> sum; sum = [term, next, &sum](int a, int b) -> int { if (a > b) return 0; else return term(a) + sum(next(a), b); };
再帰ラムダ関数が C 0x で完全に実行可能であることを示しています。型推論の問題を解決するには、明示的な型宣言が必要なだけです。
以上がC 0x の再帰 Lambda 関数に明示的な型宣言が必要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。