在之前的Stack Overflow 問題中,一個看似簡單的lambda表達式無法編譯。然而,透過在 lambda 之前加上 ' ' 運算符,程式碼奇蹟般地獲得了編譯能力。這個有趣的觀察提出了一個問題:為什麼「[]{}」有效?
關鍵在於「」運算子的重載行為。當應用於由非捕獲 lambda 產生的閉包物件時,它會呼叫內建轉換函數,將閉包轉換為普通函數指標。
此轉換至關重要,因為 ' ' 運算子有一個候選將任何類型轉換為指標的重載。因此,將 ' ' 應用於閉包物件會產生一個指向 lambda 的函數指標。
宣告第一個 lambda 後,'test' 的型別變成 void(*)(),它是函式指標void 回傳型別且沒有參數。這允許將第二個 lambda 分配給“test”,儘管閉包類型不同。
因此,程式碼的功能可以解釋如下:
此行為完全符合C 標準,使「[]{}」成為lambda 有效且非常有用的技巧表達式。
以上是為什麼「[]{}」啟用 C 中的 Lambda 表達式編譯?的詳細內容。更多資訊請關注PHP中文網其他相關文章!