C 14 Auto 키워드 변형의 일반 람다 이해
C 14에서 일반 람다, auto 키워드가 있는 람다 표현식 유형 인수 유형은 향상된 유연성을 제공합니다. 비템플릿 호출 연산자가 있는 C 11 람다와 달리 일반 람다는 정의한 클로저 유형 내에 템플릿 호출 연산자가 있습니다.
예를 들어 다음 코드는 일반 람다를 보여줍니다.
auto glambda = [](auto a) { return a; };
이 경우 glambda의 폐쇄 유형은 다음과 같이 정의됩니다.
class /* unnamed */ { public: template<typename T> T operator () (T a) const { return a; } };
이것은 glambda는 템플릿 호출 연산자가 있는 고유하고 이름이 지정되지 않은 펑터의 인스턴스라는 의미입니다. 람다의 매개변수 선언에서 auto의 각 발생은 발명된 유형 템플릿 매개변수에 해당하므로 호출 연산자가 다양한 유형의 인수를 처리할 수 있습니다.
C 14 표준(n3690)은 클로저 유형의 호출 연산자를 지정합니다. 일반 람다의 경우 람다의 매개변수 선언 절의 각 자동에 대해 하나의 발명된 유형 템플릿 매개변수가 있는 템플릿 매개변수 목록이 있습니다. 반환 유형 및 함수 매개변수는 람다의 후행 반환 유형 및 매개변수 선언 절에서 파생되며 해당 발명된 템플릿 매개변수의 이름으로 자동 대체됩니다.
요약하면 C 14의 일반 람다 템플릿 호출 연산자를 사용하여 고유하고 이름이 지정되지 않은 펑터를 나타냅니다. 이는 컴파일러가 각 인수 유형에 대해 대체된 유형으로 새 함수를 생성하는 C 템플릿 기반 다형성과 다릅니다. 이는 컴파일 중 유형 삭제를 포함하는 Java의 제네릭과 더 밀접하게 일치합니다.
위 내용은 C 14 일반 람다는 'auto' 키워드를 사용하여 유형 유연성을 어떻게 달성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!