>백엔드 개발 >C++ >C 0x의 재귀 Lambda 함수에 명시적 유형 선언이 필요한 이유는 무엇입니까?

C 0x의 재귀 Lambda 함수에 명시적 유형 선언이 필요한 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-14 10:39:15930검색

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

C 0x의 재귀 람다 함수

오류 및 해결 방법

재귀 람다를 생성하려고 할 때 자동을 사용하는 동안 오류가 발생했습니다. 람다의 유형을 추론하는 키워드입니다. 그러나 람다 유형을 std::function으로 명시적으로 선언하면 코드가 성공적으로 컴파일됩니다.

추론

자동 유형 추론:

auto를 사용할 때 컴파일러는 초기화를 기반으로 람다 유형을 추론합니다. 그러나 재귀적 람다의 경우 람다 클로저는 캡처하는 유형(이 경우 합계)을 알아야 합니다. 이렇게 하면 람다의 유형이 클로저의 유형에 따라 달라지고 클로저의 유형도 람다의 유형에 따라 달라지므로 순환 종속성이 생성됩니다.

명시적 유형 선언:

람다 유형을 std::function 함수 개체 자체는 할당되는 항목에 대해 아무것도 "알 필요"가 없기 때문에 이 문제를 해결합니다. 이를 통해 람다의 클로저가 유형 추론에 의존하지 않고 적절한 유형을 캡처할 수 있습니다.

재귀 함수:

수정된 코드 부분:

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);
};

재귀적 람다 함수가 C 0x에서 완벽하게 실행 가능함을 보여줍니다. 유형 추론 문제를 극복하려면 명시적인 유형 선언이 필요합니다.

위 내용은 C 0x의 재귀 Lambda 함수에 명시적 유형 선언이 필요한 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.