ホームページ > バックエンド開発 > C++ > 単項演算子は、引数としてラムダ式を使用して関数を呼び出すときのあいまいさをどのように解決しますか?

単項演算子は、引数としてラムダ式を使用して関数を呼び出すときのあいまいさをどのように解決しますか?

Patricia Arquette
リリース: 2024-11-14 16:22:02
オリジナル
412 人が閲覧しました

How does the unary   operator resolve ambiguity when calling a function with a lambda expression as an argument?

Lambda 関数の単項演算子によるあいまいなオーバーロードを解決する

提供されたコード スニペット内:

最初のfoo への呼び出しがあいまいで、コンパイルに失敗します。このあいまいさは、ラムダ式が std::function と std::function の両方に暗黙的に変換できるという事実から生じます。および void (*f)().

この曖昧さを解決するために、2 番目の呼び出しでラムダの前に単項演算子が使用されます。演算子は、ラムダ式を関数ポインタ型 void (*)() に変換します。これは 2 番目のオーバーロードと正確に一致します。

C 標準によると、

  • 単項演算子引数をその基になる型 (算術、列挙、またはポインタ) に変換します。
  • ラムダ式の場合、変換はクロージャ型の関数は、同じパラメータと戻り値の型を持つ関数ポインタに明示的に変換されます。

したがって、式 []() {} は void (*)() 関数ポインタになります。これは、2 番目のオーバーロードと明確に一致します。

回避するために、ラムダ式を関数ポインタ型に明示的にキャストすることもできることに注意することが重要です。曖昧さ:

以上が単項演算子は、引数としてラムダ式を使用して関数を呼び出すときのあいまいさをどのように解決しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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