C 11 の「auto」を使用したラムダ式の型推定
C 11 では、ラムダはプログラマーが匿名を定義できる強力な機能です。機能。 "auto" キーワードを使用してラムダの型を推定すると、ラムダが関数ポインタ型であるという一般的な誤解が生じます。
ラムダの性質
ただし、この仮定は間違っています。ラムダ式の基礎となる型は明示的に定義されていません。代わりに、ラムダは通常、ファンクターの糖衣構文です。ラムダはファンクター オブジェクトに直接変換され、[] 括弧内の要素はコンストラクター パラメーターとオブジェクト メンバーになり、() 括弧内のパラメーターはファンクターの Operator() のパラメーターになります。
Lambda関数ポインターへの変換
変数をキャプチャしないラムダは、確かに関数ポインターに変換できます。この変換は標準でサポートされていますが、すべてのコンパイラ (MSVC2010 など) ではサポートされていません。ただし、この変換は、ラムダの実際の型が関数ポインタであることを意味するものではありません。
結論
「auto」で推定されるラムダ式の型は、不特定です。ファンクター型。変数をキャプチャしないラムダは関数ポインターに変換できますが、この変換は実際の基になる型と同等ではないことを理解することが重要です。
以上が「auto」で推定される C 11 ラムダ式の型は関数ポインタですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。