[c++] lamda function (람다 함수) 본문

객체지향프로그래밍 (C++)

[c++] lamda function (람다 함수)

미니모아 2020. 7. 3. 14:55
반응형

Lambda Expression (c++11,14)
[캡쳐블럭](매개변수리스트) ->리턴타입{함수바디};

    []()->void {};
    []() {};
    [] {};
    short c = 5, d = 7;
    auto inha = [c, d](float a, int b){
        return a + b + c + d;
    };
    cout << inha(1.9f, 2) << endl;
    //리턴 타입 지정하지 않으면 가장 큰 자료형으로 리턴된다

캡쳐리스트 변수의 값을 변경하기 위해서는 참조 캡처해야한다.

    short c = 5, d = 7;
    auto inha = [&c, &d](float a, int b) {
        c = -11;
        d = 8;
        return a + b + c + d;
    };
    cout << inha(1.9f, 2) << endl;
    return 0;

    short c = 5, d = 7;
    auto inha = [&](float a, int b) { // 전체 변수를 참조 형태로서 캡처
        c = -11;
        d = 8;
        return a + b + c + d;
    };
    cout << typeid(inha).name() << endl; // class
    cout << inha(1.9f, 2) << endl; 

전체 변수를 값으로 캡처 하는 경우

short c = 5, d = 7;
auto inha = [=](float a, int b)->int {  
    return a + b + c + d;
}(1.9f, 2);
cout << typeid(inha).name() << endl; // int

람다함수로 재귀함수 작성하기

  • 람다에서 재귀를 구현할 때 auto 타입으로는 추론 불가
  • 반드시 대입하려고 하는 함수의 타입이 명시되어야 한다.
#include<functional>
int main(){ 
    function<int(int)> fact = [&fact](int n)->int { 
        return n <= 1 ? 1 : n * fact(n - 1);
    };

    return 0;
}

람다 함수 정리

  1. 익명함수, 함수 객체를 생성
  2. 함수 포인터와 함수 객체의 장점을 지닌다.
  3. 캡쳐 기능을 통해 함수 밖의 변수에 접근할 수 있고 & 기호를 통해 람다함수 안에서도 외부 변수의 값을 변경할 수 있다.
  4. 재귀 호출도 가능하다.
반응형
Comments