::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"