使用Lambda 函數的Constexpr:當前狀態和未來前景
在C 中,constexpr 支援器在編譯時對表達式求式值。然而,它對 lambda 函數的支援一直是人們感興趣的話題。
歷史上,C 14 禁止在常數表達式中使用 lambda 函數。在各種情況下強制使用 constexpr 的嘗試被證明是不成功的。
但是,隨著 C 17 接受 N4487,已經取得了重大進展。該提案允許在特定條件下在常數表達式中使用 lambda 表達式:
1。正確的 Lambda 表達式語法:
將 lambda 與 constexpr 一起使用時,請確保將 lambda 聲明為 constexpr。這通知編譯器應將 lambda 視為常數表達式。
2.閉包類型作為文字類型:
對於要在常數表達式中使用的lambda 表達式,其閉包類型(由lambda 建立的物件的類型)必須是文字類型。這意味著它的所有資料成員也必須是文字類型。
3. Constexpr 推論:
如果lambda 聲明省略了constexpr 說明符,則函數呼叫運算子將推斷為constexpr,前提是它滿足cons函數的要求。與隱式建構函數和賦值運算子類似。
4.未來展望:
隨著 C 17 的實現,lambda 函數現在可以在常數表達式中使用。隨著 C 的發展,未來的修訂可能會進一步擴展這種支持,從而有可能在恆定時間場景中為 lambda 提供更複雜和通用的用例。
以上是Lambda 函數可以在 C 語言的 Constexpr 中使用嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!