ホームページ >バックエンド開発 >C++ >「auto」で推定される C 11 ラムダ式の型は関数ポインタですか?

「auto」で推定される C 11 ラムダ式の型は関数ポインタですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-16 04:20:12758ブラウズ

Is a C  11 Lambda Expression's Type Deduced with

C 11 の「auto」を使用したラムダ式の型推定

C 11 では、ラムダはプログラマーが匿名を定義できる強力な機能です。機能。 "auto" キーワードを使用してラムダの型を推定すると、ラムダが関数ポインタ型であるという一般的な誤解が生じます。

ラムダの性質

ただし、この仮定は間違っています。ラムダ式の基礎となる型は明示的に定義されていません。代わりに、ラムダは通常、ファンクターの糖衣構文です。ラムダはファンクター オブジェクトに直接変換され、[] 括弧内の要素はコンストラクター パラメーターとオブジェクト メンバーになり、() 括弧内のパラメーターはファンクターの Operator() のパラメーターになります。

Lambda関数ポインターへの変換

変数をキャプチャしないラムダは、確かに関数ポインターに変換できます。この変換は標準でサポートされていますが、すべてのコンパイラ (MSVC2010 など) ではサポートされていません。ただし、この変換は、ラムダの実際の型が関数ポインタであることを意味するものではありません。

結論

「auto」で推定されるラムダ式の型は、不特定です。ファンクター型。変数をキャプチャしないラムダは関数ポインターに変換できますが、この変換は実際の基になる型と同等ではないことを理解することが重要です。

以上が「auto」で推定される C 11 ラムダ式の型は関数ポインタですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。