::public/C++
(c++11) lambda
해맑은욱
2023. 2. 8. 16:17
lambda, 람다 표현식 / 람다 함수.
*이름이 없어서 익명 함수라고도 불린다. 코드를 깔끔하게 만들 수 있다.
[캡처 블록] (매개변수) -> 리턴 타입 { 본문 }
캡처 블록(생략 가능)
: 스코프에 있는 변수를 캡처하는 방식을 지정, 본문에서 그 변수에 접근할 수 있게 만든다.
[&] _ 외부의 모든 변수들을 레퍼런스 형태로 캡처
[&var] _ 외부에 정의되어 있는 변수를 레퍼런스 형태로 캡처
[=] _ 외부의 모든 변수를 복사한 값으로 캡처
[=var] _ 외부의 정의되어 있는 변수를 복사한 값으로 캡처
[this] _ 현제 객체를 캡처
[*this] _ 현제 객체의 복사본을 캡처
매개변수(생략 가능)
: 람다 표현식에 대한 매개변수 록록.
리턴 타입(생략 가능)
: 람다 표현식의 리턴 타입을 지정한다. 생략하면 컴파일러가 추론한다.
본문
: 람다 표현식의 함수 몸통.
basic
auto basicLambda = []() -> void {
cout << "basicLambda function" << endl;
};
basicLambda(); // "basicLambda function"
parameter & return
auto paramLambda = [](int a, int b) -> int {
return a + b;
};
cout << "paramLambda = " << paramLambda(1, 2) << endl; // "paramLambda = 3"
capturting
int a = 100;
int b = 10;
auto capturingLambda = [a, &b](int c) -> void {
cout << "capturingLambda a = " << a << endl;
b *= c;
cout << "capturingLambda b = " << b << endl;
};
capturingLambda(2); // "capturingLambda a = 100 capturingLambda b = 20"