首頁 > 後端開發 > C++ > 為什麼 C 0x 中的遞歸 Lambda 函數需要明確型別宣告?

為什麼 C 0x 中的遞歸 Lambda 函數需要明確型別宣告?

Susan Sarandon
發布: 2024-12-14 10:39:15
原創
925 人瀏覽過

Why Does a Recursive Lambda Function in C  0x Require Explicit Type Declaration?

C 0x 中的遞歸Lambda 函數

錯誤和解決方案

在嘗試建立遞歸lambda 時,您在使用auto 時遇到錯誤關鍵字來推論lambda 的型別。但是,當您將 lambda 的類型明確宣告為 std::function 時,程式碼編譯成功。

推理

自動型別推論:

使用 auto 時,編譯器依據 lambda 的初始化推斷其型別。然而,對於遞歸 lambda,lambda 閉包需要知道它正在捕獲的類型(在本例中為 sum)。這會建立循環依賴,因為 lambda 的類型取決於其閉包的類型,而閉包的類型取決於 lambda 的類型。

明確型別宣告:

將lambda 的型別宣告為std::function解決了這個問題,因為函式物件本身不需要「知道」任何關於分配給它的內容。這使得 lambda 閉包能夠捕獲適當的類型,而無需依賴類型推斷。

遞歸函數:

修改後的程式碼段:

std::function<int(int, int)> sum;

sum = [term, next, &amp;sum](int a, int b) -> int {
    if (a > b)
        return 0;
    else
        return term(a) + sum(next(a), b);
};
登入後複製

證明遞歸 lambda 函數在 C 0x 中完全可行。它們只需要顯式類型聲明來克服類型推斷問題。

以上是為什麼 C 0x 中的遞歸 Lambda 函數需要明確型別宣告?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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