Modern C++ - lambda

진경천·2024년 3월 15일
0

C++

목록 보기
83/90

lambda의 기본구조

[캡쳐](매개변수) -> <반환type> {함수동작}(호출인자)

일반 함수에서 함수 이름이 없어지고 동작만 있는 함수
lambda는 사실상 함수 객체라고 봐도 무방하다.

매개변수, 반환타입, 호출인자는 생략 가능하다.

#include <iostream>

using namespace std;

int main() {
	int a = 10;
    [a](int b) -> int {
    	cout << a + b << endl;
    	return a + b;
    }(20);
    
    cout << a;
}

실행 결과

30
10

lambda의 4가지 형태

  • 매개변수가 없는 람다 : [] { statement };
  • 매개변수가 있는 람다 : [](int a, int b) { statement };
  • 매개변수가 없고 반환이 있는 람다 : [] { return 100 };
  • 매개변수가 있고 반환이 있는 람다 : `[](int a, int b) { return a + b };

캡쳐

  • [value0, value1] : 변수 value0와 value1을 복사하여 람다 함수 내부에서 사용
  • [&value0, &value1] : 변수 value0와 value1을 참조하여 람다 함수 내부에서 사용
  • [&value0, value1] : 변수 value0는 참조, value1은 복사하여 람다 함수 내부에서 사용
  • [=] : 모든 외부 변수를 복사하여 람다 함수 내부에서 사용
  • [&] : 모든 외부 변수를 참조하여 람다 함수 내부에서 사용
  • [&, value] : 모든 외부 변수를 참조하지만 value만 복사하여 사용
  • [=, &value] : 모든 외부 변수를 복사하지만 value만 참조하여 사용
profile
어중이떠중이

0개의 댓글