C++ 람다 함수: 간결하고 유연한 형태로 함수 객체 생성
C++에서 람다 함수는 간결하고 유연한 형태로 함수 객체를 생성할 수 있는 강력한 기능
다음은 람다 함수의 일반적인 형식과 이를 구성하는 요소들에 대한 설명
auto func = [](const int& i) -> void {
// body
};
[]| 형태 | 설명 |
|---|---|
[] | 외부 변수를 캡처하지 않음. |
[x] | 변수 x를 복사로 캡처. |
[&x] | 변수 x를 참조로 캡처. |
[=] | 사용된 모든 외부 변수를 복사로 캡처. |
[&] | 사용된 모든 외부 변수를 참조로 캡처. |
(const int& i)(): 매개변수가 없음(int a, double b): 두 개의 매개변수[x](auto y) { return x + y; }: C++14의 타입 추론 사용-> void| 형태 | 설명 |
|---|---|
-> void | 반환값이 없음 |
-> int | 정수를 반환 |
| 반환 타입 생략 | 컴파일러가 본문에서 타입을 추론. |
[](int x) { return x * 2; }
{ // body }{ std::cout << "Hello, World!"; }: 메시지 출력{ return a + b; }: 계산 후 값을 반환람다 함수의 실전 사용 예제
#include <iostream>
int main() {
int x = 10;
// 외부 변수를 복사로 캡처
auto add = [x](int y) -> int {
return x + y;
};
// 매개변수와 반환 타입 생략
auto multiply = [](int a, int b) {
return a * b;
};
std::cout << "Add: " << add(5) << "\n"; // 출력: Add: 15
std::cout << "lambda Add: " << [x](int y) -> int { return x + y; }(5) << "\n"; // 출력: Add: 15
std::cout << "Multiply: " << multiply(2, 3) << "\n"; // 출력: Multiply: 6
std::cout << "lambda Multiply: " << [](int a, int b) {return a * b; }(2, 3) << "\n"; // 출력: Multiply: 6
}
함수 객체나 콜백 함수가 필요한 상황에서 유용하므로
C++14 이상의 기능을 활용하면 더욱 편리하게 사용할 수 있으니 꼭 익혀두는 것이 좋다.