>백엔드 개발 >C++ >C 14의 일반 람다는 어떻게 작동합니까?

C 14의 일반 람다는 어떻게 작동합니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-06 00:53:11141검색

How Do Generic Lambdas in C  14 Work?

C 14의 일반 람다 이해

C 14에 도입된 일반 람다는 모든 값에 작동하는 람다 식을 작성하는 수단을 제공합니다. 유형. 그러나 이 메커니즘은 어떻게 작동합니까?

일반 람다 구현

C 11의 일반 람다와 달리 일반 람다는 템플릿 호출 연산자를 사용합니다. 폐쇄형. [auto](https://en.cppreference.com/w/cpp/keyword/auto) 키워드가 매개변수 목록에 나타나면 컴파일러는 표준 호출 연산자가 아닌 템플릿 호출 연산자를 생성합니다.

예:

auto glambda = [](auto a) { return a; };

이 코드는 다음 호출을 사용하여 클로저 유형을 생성합니다. 연산자:

class /* unnamed */
{
public:
    template<typename T>
    T operator () (T a) const { return a; }
};

표준 정의

C 14 Standard Draft n3690의 단락 5.1.2/5에 따르면 일반 람다 클로저 유형의 호출 연산자입니다. 다음과 같은 속성이 있습니다.

  • 각 발생 매개변수 목록의 [auto](https://en.cppreference.com/w/cpp/keyword/auto)는 발명된 유형 템플릿 매개변수에 해당합니다.
  • 호출 연산자의 반환 유형과 함수 매개변수가 파생됩니다. 각 [auto](https://en.cppreference.com/w/cpp/keyword/auto)를 발명된 템플릿 매개변수로 대체하여 람다의 후행 반환 유형 및 매개변수 선언 절에서 name.

C 템플릿과 Java Generics의 유사성

일반 람다는 컴파일러가 기반으로 다양한 인수 유형을 사용하여 고유한 함수를 생성한다는 점에서 C 템플릿과 유사합니다. 템플릿 매개변수에 대해 그러나 런타임 시 유형 삭제를 활용하여 컴파일 시 유형 정보를 유지하는 Java 제네릭과는 다릅니다. 반면 일반 람다는 명시적 유형을 사용하여 정적으로 특화된 클로저를 만듭니다.

위 내용은 C 14의 일반 람다는 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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