TIL

[cpp] 람다 함수

hio9_9 2022. 11. 21. 13:51

람다함수란 쉽게 말해 이름 없는 함수이다.

함수 또는 함수객체를 따로 정의하지 않고, 필요한 지점에서 람다식을 사용해 바로 함수처럼 사용할 수 있다.

[ [captures] ] ( [parameters] ) -> [return type] { [function body] }

 

ex) 1부터 n까지 홀수의 합 구하기, odd() 대신 람다함수 이용

#include <iostream>
using namespace std;

/*
bool odd(int n) {
    return ((n % 2) == 1);
}
*/

int sum(int n, bool (*check)(int)) {
    int res = 0;
    
    for (int i=1; i<=n; i++) {
        if ( (*check)(i) ) res += i;
    }
    
    return (res);
}

int main()
{
    // cout << sum(10, odd);
    cout << sum(10, [](int n)->bool {return ((n % 2) == 1); });
    return 0;
}

[ capture ]

  • 호출되는 스코프 범위 내에 존재하는 변수들을 캡쳐하여 람다 함수 내에서도 사용할 수 있음
  • 값으로 캡쳐할 것인지, 참조로 캡쳐할 것인지 등을 캡쳐 블록으로 설정할 수 있음
[var] 변수 var만 값으로 캡쳐, 다른 변수는 캡쳐 X
[&var] 변수 var만 참조로 캡쳐, 다른 변수는 캡쳐 X
[=, &var] 모든 변수를 값으로 캡쳐, 변수 var만 참조로 캡쳐
[&, var] 모든 변수를 참조로 캡쳐, 변수 var만 값으로 캡쳐
[this] 클래스 멤버 함수인 경우 자기 자신 전달, [=]로도 가능