C++ - 람다표현식
C++ 람다표현식
1. 개요
C++ 람다 표현식(Lambda Expression)은 익명 함수(anonymous function)를 간편하게 정의하고 사용할 수 있게 해 주는 문법이다. 주로 일회성 콜백이나 함수 객체로 사용할 때 유용하다.
2. 기본 사용법
1
2
3
[Capture Clause] (parameters) -> return_type {
// function body
}
- capture-list: 주변(local) 변수를 람다 내부로 가져오는 방법
- (parameters): 매개변수 목록 (일반 함수와 동일)
- -> return_type: 반환 타입 지정 (생략 가능; 컴파일러가 추론)
- { … }: 함수 본문
간단한 예시는 아래와 같다.
1
2
3
4
auto add = [](int a, int b) {
return a + b; // 반환 타입(int)은 컴파일러 추론
};
std::cout << add(2, 3); // 5 출력
3. Capture Clause
람다표현식은 외부 변수를 가져다 쓸수있는데 이를 Capture Clause라고 하며 이를 지정하는 문구는 아래와 같다.
캡처 방법 | 의미 |
---|---|
[=] | 외부 모든 변수를 값 복사로 캡처 |
[&] | 외부 모든 변수를 참조로 캡처 |
[x, &y] | 변수 x 는 값 복사, y 는 참조로 캡처 |
[this] | 멤버 함수 안에서 현재 객체의 this 포인터를 캡처 |
[=, &z] | 기본은 값 복사, 단 z 만 참조로 캡처 |
[&, x] | 기본은 참조, 단 x 만 값 복사 |
각 방법에 대한 간단한 예시는 아래와 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int n = 10;
int m = 20;
// 값 복사 캡처
auto f1 = [=]() {
// n, m 모두 값 복사
return n + m;
};
// 참조 캡처
auto f2 = [&]() {
n += 5; // 외부 n을 직접 수정
return n;
};
// 혼합 캡처
auto f3 = [n, &m]() {
// n은 복사본, m은 참조
// n = 15; // 에러: n은 const 복사본
m = 30;
return n + m;
};
참고자료
This post is licensed under CC BY 4.0 by the author.