ホームページ > バックエンド開発 > C++ > 「auto」は C 11 ラムダ式に対してどのような型を推定しますか?

「auto」は C 11 ラムダ式に対してどのような型を推定しますか?

Barbara Streisand
リリース: 2024-12-06 01:10:10
オリジナル
552 人が閲覧しました

What Type Does

C 11 の "auto" を使用したラムダ演繹の型の探索

ラムダの型は関数ポインターであるという誤解に反して、最近のテストで予期せぬ結果が判明しました。ラムダ式を関数ポインターと「auto」変数の両方に代入しようとすると、アサーションは失敗します。これにより、「auto」キーワードで推定されたラムダの本当の型は何なのかという疑問が生じます。

明確にするために、ラムダ式は事実上、ファンクターの構文上のショートカットです。コンパイル中に、ラムダはファンクター オブジェクトに変換されます。 [] 括弧内の要素はコンストラクター パラメーターとファンクター メンバー変数になりますが、() 括弧内のパラメーターはファンクターの Operator() パラメーターに変換されます。

驚くべきことに、ラムダは変数をキャプチャしません (つまり、変数内に要素がないラムダ)。 []) は関数ポインターに変換できます (ただし、この変換は MSVC2010 ではサポートされていません)。ただし、ラムダの組み込み型は未指定のファンクター型のままであることを強調することが重要です。

提供されたコード例では、ラムダ式 LAMBDA は最初に関数ポインター pFptr に割り当てられ、次に「auto」に割り当てられます。 " 変数 pAuto.後続のアサーションは、pFptr と pAuto の型が等しいことを検証し、実際に合格します。これは、「auto」キーワードがラムダの型を関数ポインターであると正常に推定し、pFptr へのシームレスな代入を可能にしていることを示しています。

それにもかかわらず、重要なポイントは、ラムダは本質的には指定されていないファンクター型であるということです。関数ポインターにキャストできる機能。この違いは、最新の C プログラミングにおけるラムダ式の柔軟性と複雑さを強調しています。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート