在嘗試建立遞歸lambda 時,您在使用auto 時遇到錯誤關鍵字來推論lambda 的型別。但是,當您將 lambda 的類型明確宣告為 std::function 時,程式碼編譯成功。
自動型別推論:
使用 auto 時,編譯器依據 lambda 的初始化推斷其型別。然而,對於遞歸 lambda,lambda 閉包需要知道它正在捕獲的類型(在本例中為 sum)。這會建立循環依賴,因為 lambda 的類型取決於其閉包的類型,而閉包的類型取決於 lambda 的類型。
明確型別宣告:
將lambda 的型別宣告為std::function
遞歸函數:
修改後的程式碼段:
std::function<int(int, int)> sum; sum = [term, next, &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中文網其他相關文章!