재귀 람다를 생성하려고 할 때 자동을 사용하는 동안 오류가 발생했습니다. 람다의 유형을 추론하는 키워드입니다. 그러나 람다 유형을 std::function으로 명시적으로 선언하면 코드가 성공적으로 컴파일됩니다.
자동 유형 추론:
auto를 사용할 때 컴파일러는 초기화를 기반으로 람다 유형을 추론합니다. 그러나 재귀적 람다의 경우 람다 클로저는 캡처하는 유형(이 경우 합계)을 알아야 합니다. 이렇게 하면 람다의 유형이 클로저의 유형에 따라 달라지고 클로저의 유형도 람다의 유형에 따라 달라지므로 순환 종속성이 생성됩니다.
명시적 유형 선언:
람다 유형을 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); };
재귀적 람다 함수가 C 0x에서 완벽하게 실행 가능함을 보여줍니다. 유형 추론 문제를 극복하려면 명시적인 유형 선언이 필요합니다.
위 내용은 C 0x의 재귀 Lambda 함수에 명시적 유형 선언이 필요한 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!