在C 編碼領域,「」運算子的行為應用於lambda ('[] {}') 激發了好奇心。雖然程式碼看起來非常規,但令人驚訝的是,它可以使用主要編譯器成功編譯。但是這個異常是如何運作的呢?
理解這種行為的關鍵在於 ' ' 運算子的重載。當應用於 lambda 時,「 」會觸發到普通舊函數指標的轉換。這是可能的,因為所討論的 lambda 是非捕獲的,這意味著它不引用任何外部變數。
根據 C 標準(第 5.1.2 節),非捕獲 lambda 閉包物件具有返回函數指標的公共非虛擬轉換函數。此指標指向一個與 lambda 具有相同行為的函數。
「 」運算子具有內建重載,可將任何類型轉換為指標。在 lambda 的情況下,選擇前面提到的轉換函數作為候選重載。結果是與 lambda 的函數呼叫運算子具有相同參數和傳回類型的函數指標。
因此,當 ' ' 應用於第一個 lambda 時,它將 lambda 閉包物件轉換為函數指標。這使得可以將第二個 lambda 閉包物件指派給同一個函數指針,因為兩個 lambda 具有相容的類型。
是的,使用「[]{}」的程式碼是符合標準。 C 標準允許將非捕獲 lambda 閉包物件轉換為函數指標。這種行為可以實現一些令人驚訝但有效的編碼技巧。
以上是C 中的 ' ' 運算子如何與非捕獲 Lambda 一起使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!