Post

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.