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] | 클래스 멤버 함수인 경우 자기 자신 전달, [=]로도 가능 |