解決遞歸Lambda 函數的編譯問題
在嘗試定義遞歸lambda 函數時,以下程式碼無法編譯:
auto sum = [term,next,&sum](int a, int b)mutable ->int { if(a>b) return 0; else return term(a) + sum(next(a),b); };
錯誤源自於無法使用「auto」初始化捕捉自身的lambda 函數。自動類型推斷無法確定 lambda 的返回類型,因為它取決於捕獲的變數。 要修正此問題,可以採取以下步驟:
使用完全指定的函數物件類型:
std::function<int(int,int)> sum = [term,next,&sum](int a, int b)->int { if(a>b) return 0; else return term(a) + sum(next(a),b); };指定函數物件type 消除了自動類型推斷的需要,允許編譯器準確地確定返回類型。
稍後初始化函數物件:
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 函數無法編譯,如何修復?的詳細內容。更多資訊請關注PHP中文網其他相關文章!