Lambda function

열수철·2024년 12월 14일

C++ 람다 함수: 간결하고 유연한 형태로 함수 객체 생성

C++에서 람다 함수는 간결하고 유연한 형태로 함수 객체를 생성할 수 있는 강력한 기능
다음은 람다 함수의 일반적인 형식과 이를 구성하는 요소들에 대한 설명

람다 함수 형식

auto func = [](const int& i) -> void {
    // body
};

구성 요소

1. Introducer

  • 형태: []
  • 설명: 람다 함수의 시작을 알리는 기호
    캡처 리스트를 포함하며, 람다 함수 내부에서 외부 변수를 사용하는 방식을 지정
형태설명
[]외부 변수를 캡처하지 않음.
[x]변수 x를 복사로 캡처.
[&x]변수 x를 참조로 캡처.
[=]사용된 모든 외부 변수를 복사로 캡처.
[&]사용된 모든 외부 변수를 참조로 캡처.

2. Parameter-Declaration

  • 형태: (const int& i)
  • 설명: 함수 호출 시 전달받는 매개변수와 그 타입을 선언
    C++14 이상에서는 매개변수의 타입 생략 가능

매개변수 형태와 예제

  • (): 매개변수가 없음
  • (int a, double b): 두 개의 매개변수
  • [x](auto y) { return x + y; }: C++14의 타입 추론 사용

3. Return-Type-Clause

  • 형태: -> void
  • 설명: 람다 함수의 반환 타입을 명시
    반환 타입을 생략할 수도 있으며, 이 경우 컴파일러가 함수 본문에서 타입 추론
형태설명
-> void반환값이 없음
-> int정수를 반환
반환 타입 생략컴파일러가 본문에서 타입을 추론.

예제

[](int x) { return x * 2; }

4. Compound-Statement

  • 형태: { // 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 이상의 기능을 활용하면 더욱 편리하게 사용할 수 있으니 꼭 익혀두는 것이 좋다.

profile
그래픽스, 수학, 물리, 게임 만세

0개의 댓글