lambdas c with examples
간단한 용어로 C ++의 Lambda 표현식에 대해 모두 알아보십시오.
Lambda 표현식은 C ++ 11부터 도입 된 C ++의 최신 개념입니다.
이 튜토리얼에서는 C ++의 람다에 대해 배웁니다. 또한 프로그램에서 람다를 정의하고 사용하는 방법에 대해서도 설명합니다.
=> 여기에서 전체 C ++ 교육 시리즈를 확인하십시오.
학습 내용 :
Lambda 표현식 / 함수
일반적으로 호출되는 Lambda는 기본적으로 함수 또는 함수 호출 문 내에서 사용할 수있는 코드의 작은 인라인 스 니펫입니다. 이름이 지정되거나 재사용되지 않습니다.
람다를 '자동'으로 선언하고 프로그램의 어느 곳에서나 사용할 수 있습니다.
Lambda를 사용 / 쓰기하는 방법?
람다를 정의하는 일반적인 구문은 다음과 같습니다.
(Capture clause) (parameter_list) mutable exception ->return_type { Method definition; }
폐쇄 캡처 : C ++ 사양에 따른 Lambda 소개 자.
매개 변수 목록 : 람다 선언이라고도합니다. 선택 사항이며 메소드의 매개 변수 목록과 유사합니다.
변하기 쉬운 : 선택 사항. 값으로 호출에 의해 캡처 된 변수를 수정할 수 있습니다.
예외 : 예외 사양. 선택 과목. 'noexcept'를 사용하여 람다가 예외를 throw하지 않음을 나타냅니다.
반환 _ 유형 : 선택 사항. 컴파일러는 식의 반환 유형을 자체적으로 추론합니다. 그러나 람다가 더 복잡 해짐에 따라 컴파일러가 반환 유형을 추론하지 못할 수 있으므로 반환 유형을 포함하는 것이 좋습니다.
방법 정의 : 람다 본체.
람다 정의의 캡처 절은 캡처되는 변수와 참조 또는 값으로 캡처되는지 여부를 지정하는 데 사용됩니다.
빈 캡처 클로저 []는 람다가 변수를 사용하지 않음을 나타냅니다. 즉, 로컬 변수에만 액세스 할 수 있습니다.
'capture-default'모드는 Lambda에서 참조되는 변수 외부에서 캡처하는 방법을 나타냅니다.
- 캡처 클로저 [&]는 변수가 참조로 캡처됨을 의미합니다.
- 캡처 클로저 [=]는 변수가 값으로 캡처되었음을 나타냅니다.
캡처 기본 및 캡처 절이있는 경우 특정 캡처 캡처에 식별자가있을 수 없으며 & 식별자를 가질 수 있습니다. 마찬가지로 capture 절에 capture-default =가 포함되어 있으면 capture 절은 = identifier 형식을 가질 수 없습니다. 또한 식별자 또는 'this'는 캡처 절에 두 번 이상 나타날 수 없습니다.
이것은 다음 예에서 명확해야합니다.
[&sum, sum_var] //OK, explicitly specified capture by value [sum_var, &sum] //ok, explicitly specified capture by reference [&, &sum_var] // error, & is the default still sum_var preceded by & [i, i] //error, i is used more than once
여기서 sum, sum_var 및 I는 람다에서 캡처 및 사용되는 변수입니다.
다음은 C ++에서 Lambda 표현식의 기본 예입니다.
자바에서 문자열 배열 만들기
#include #include using namespace std; int main() { auto sum = [](int a, int b) { return a + b; }; cout <<'Sum of two integers:'<< sum(5, 6) << endl; return 0; }
산출:
두 정수의 합 : 11
여기에 두 값의 합을 계산하는 인라인 람다식이 있습니다. 값 a와 b의 유형을 정수로 지정했습니다.
위 코드의 한 가지 문제점은 정수에서만 작동한다는 것입니다. 나중에 프로그램에서 두 개의 double, string 또는 다른 유형을 추가하려면 많은 람다가 있어야합니다. 이것은 효율적인 프로그래밍 방법이 아닙니다.
템플릿 매개 변수를 사용하여이 문제를 극복 할 수 있습니다. 이렇게하면 모든 데이터 유형에 대해 람다가 일반화됩니다. 이것은 C ++ 14부터 수행됩니다.
따라서 위의 프로그램은 다음과 같이 수정됩니다.
#include #include using namespace std; int main() { // generalized lambda auto sum = [](auto a, auto b) { return a + b; }; cout <<'Sum(5,6) = '<< sum(5, 6) << endl; // sum of two integers cout <<'Sum(2.0,6.5) = '< 산출:
합계 (5,6) = 11
합계 (2.0,6.5) = 8.5
Sum ((string ( 'SoftwareTesting'), string ( 'help.com')) = SoftwareTestinghelp.com
따라서이 프로그램에서는 모든 유형의 두 개체의 합계를 찾는 데 사용할 수있는 일반 람다 합계를 사용했습니다. 매개 변수의 데이터 유형이 데이터를 기반으로 추론됨을 나타 내기 위해 'auto'키워드를 사용했습니다.
이 람다의 사용법을 보여주기 위해 int, float 및 string의 세 가지 데이터 유형과 함께 사용했습니다. 출력에서 데이터 유형에 따라 합계 연산이 수행된다는 것을 알고 있습니다. 예를 들어, 람다 합계에 문자열 매개 변수를 제공하면 두 문자열을 연결합니다.
결론
우리는 C ++의 람다 식에 대한이 자습서를 마쳤습니다. 이것은 C ++의 최신 개념이며 작은 코드 조각을 인라인으로 실행해야 할 때 매우 유용 할 수 있습니다. Lambda를 일반화하여 모든 데이터 유형에 사용할 수도 있습니다.
다음 자습서에서는 시간, 표준 입력 / 출력 및 로깅과 같은 C ++의 추가 항목에 대해 설명합니다.
=> 여기에서 인기있는 C ++ 교육 시리즈를 읽어보십시오.
추천 도서