관리 메뉴

Storage Gonie

(12) C++ 람다(lambda) 함수 사용법 본문

알고리즘/문제해결을 위한 C++ 공부

(12) C++ 람다(lambda) 함수 사용법

Storage Gonie 2019. 4. 25. 22:29
반응형

# lambda 함수의 용도

- 이름이 없는 함수를 바로 선언하여 사용할 수 있도록 하는 기능
- 함수를 한정된 곳에서만 사용하는 경우에 사용함

- 다른 함수의 파라미터로 전달될 수 있기도 함
- C++ 11 부터 제공된다.

 

# lambda 함수의 구조

- int mul(int a, int b){ return a*b;} 원래 이런 형태에서 int mul(int a, int b){ return a*b;} 로 됐는데 조금 변형된 느낌.

 

@ 선언하자마자 호출하는 형태
- [변수캡쳐] (파라미터 변수 및 타입선언)->리턴타입{return 연산 ;}(넘길인자) 형태로 사용되거나
- [변수캡쳐] (파라미터 변수 및 타입선언){return 연산 ;}(넘길인자) 형태로 사용됨.(함수의 반환값이 void인 경우)

@ 선언만 하는경우

- [변수캡쳐] (파라미터 변수 및 타입선언){return 연산 ;} 형태로 사용됨.(넘길인자 부분이 없어짐)   

 

# [변수캡쳐]

- 변수캡쳐는 현재 함수에서 사용할 외부 변수들을 의미한다.

- [ ] 비워두면 아무 변수도 사용하지 않는다는 뜻이고,
- [변수] 이면 외부의 해당 변수만 사용하겠다는 것을 의미하고,                  -> 변수를 읽기만 가능하고, 값 변경 불가
- [=] 이면 외부의 모든 지역변수를 사용하겠다는 것을 의미하고,                -> 변수를 읽기만 가능하고, 값 변경 불가
- [&] 이면 외부의 모든 지역변수를 참조형으로 사용하겠다는 의미하고,    -> 변수의 값 수정 가능
- [=, &변수]처럼 특정 변수만 참조형으로 사용하는 것도 가능하다.

# (파라미터)

- 파라미터로 받을 변수들

 

# ->리턴타입

- 함수의 반환값의 타입을 지정해주는 것
- 반환값이 void일 경우 화살표와 함께 생략가능

 

# 예시코드

#include <iostream>

using namespace std;

int main(void)
{
    int a = 5;
    int b = 2;

    // 변수캡쳐를 사용하지 않고, 인자를 직접 받는 예시
    int result1 = [](int n, int m)->int{return n + m;}(a, b);   // 7
    
    // 변수캡쳐에 지역변수를 사용한 예시
    int result2 = [a]()->int{return a;}();                      // 5
    int result3 = [a, b]()->int{return a + b;}();               // 7
    
    // 변수캡쳐에 =를 사용한 예시
    int result4 = [=]()->int{return a + b;}();                  // 7

    // 변수캡쳐에 &를 사용한 예시
    int result5 = [&]()->int{return a + b;}();                  // 7
    int result6 = [&]()->int{return a = a + b;}();              // 7, a = 7

    // 람다함수 내부에 람다함수를 포함시킨 예시
    int result7 = [&]()->int{                                   // 9
        return [&]()->int{return a + b;}();    
    }();         
}
반응형
Comments