首頁 > 後端開發 > C++ > 為什麼 `auto` 不將 Lambda 表達式的類型推導為 C 11 中的函數指標?

為什麼 `auto` 不將 Lambda 表達式的類型推導為 C 11 中的函數指標?

Mary-Kate Olsen
發布: 2024-12-08 03:59:09
原創
298 人瀏覽過

Why Doesn't `auto` Deduce a Lambda Expression's Type as a Function Pointer in C  11?

揭秘C 11 中「auto」的Lambda 類型推導

在C 11 領域,lambda 表達式的引入引發了一些問題關於使用“auto”關鍵字推導時的基礎類型。事實證明,lambda 類型是函數指標的假設是不準確的,如以下程式碼片段所示:

#define LAMBDA [] (int i) -> long { return 0; }
int main ()
{
    long (*pFptr)(int) = LAMBDA;  // ok
    auto pAuto = LAMBDA;  // ok
    assert(typeid(pFptr) == typeid(pAuto));  // assertion fails!
}
登入後複製

此程式碼展示了函數指標和使用「auto」的lambda 表達式之間的類型推導差異。 」關鍵字。有趣的是,斷言失敗了,這表明lambda 的類型不是函數指針。

揭開Lambda 類型的真實本質

要理解這個明顯的悖論,至關重要的是要認識到lambda 表達式的類型在C 11中仍未指定。函數運算子() 的參數。不支援的功能。

「auto」 " 關鍵字為類型推導提供了便利,但辨別不同語言實體的底層類型至關重要。就 lambda 表達式而言,它們的未指定性質和轉換為函數指標的潛力(如果適用)突顯了 C 11 提供的靈活性,同時也強調了理解語言複雜細微差別的重要性。

以上是為什麼 `auto` 不將 Lambda 表達式的類型推導為 C 11 中的函數指標?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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