首頁 > 後端開發 > C++ > 為什麼「[]{}」啟用 C 中的 Lambda 表達式編譯?

為什麼「[]{}」啟用 C 中的 Lambda 表達式編譯?

Barbara Streisand
發布: 2024-12-24 18:21:18
原創
633 人瀏覽過

Why Does

用Lambda 表達式揭開「 」的神秘面紗:「[]{}」

在之前的Stack Overflow 問題中,一個看似簡單的lambda表達式無法編譯。然而,透過在 lambda 之前加上 ' ' 運算符,程式碼奇蹟般地獲得了編譯能力。這個有趣的觀察提出了一個問題:為什麼「[]{}」有效?

關鍵在於「」運算子的重載行為。當應用於由非捕獲 lambda 產生的閉包物件時,它會呼叫內建轉換函數,將閉包轉換為普通函數指標。

此轉換至關重要,因為 ' ' 運算子有一個候選將任何類型轉換為指標的重載。因此,將 ' ' 應用於閉包物件會產生一個指向 lambda 的函數指標。

宣告第一個 lambda 後,'test' 的型別變成 void(*)(),它是函式指標void 回傳型別且沒有參數。這允許將第二個 lambda 分配給“test”,儘管閉包類型不同。

因此,程式碼的功能可以解釋如下:

  1. 第一個 lambda 是使用 ' ' 運算子轉換為函數指標。
  2. 'test' 的型別變成函數指標void(*)().
  3. 第二個 lambda 也轉換為函數指針,確保與 'test' 相容。
  4. 對'test' 的賦值成功,因為兩個函數指標相容.

此行為完全符合C 標準,使「[]{}」成為lambda 有效且非常有用的技巧表達式。

以上是為什麼「[]{}」啟用 C 中的 Lambda 表達式編譯?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板