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"

'::public > C++' 카테고리의 다른 글

const 위치에 따른 의미  (0) 2023.07.05
*개념을 항상 생각하고 정리하자!  (0) 2023.06.22
(C++11) std::move  (0) 2023.01.31
(C++11) alignas  (0) 2023.01.18
byte padding(바이트 패딩)  (0) 2023.01.18

+ Recent posts