본문 바로가기

SW 지식/C 와 C++ 공부

[C++] 람다 식 Lambda expressions

lambda 의 사전적 정의

lambda

명사
1. 람다(Λ, λ): 그리스어 알파벳의 열한째 자모. (참고 - 영어에서는 L, l로 표기됨.)

2. [화학] 람다: 체적의 단위; =10⁻³cm³, 10⁻⁶liter.
3. [물리] 람다 입자(粒子)(lambda particle): hyperon의 하나.
4. [유전학] 람다 파지: 대장균의 유전자를 도입하고 다른 데로 전송 하는 능력을 가짐.

그렇다면, C++에서 나오는 lambda 식은 무엇일까?

 

Lambda expressions (since C++11)

Constructs a closure: an unnamed function object capable of capturing variables in scope.
-> 범위 내에서 변수를 캡처할 수 있는 이름 없는 함수 개체...라... 좀 더 자세히 알아봅시다.

출처 : https://en.cppreference.com/w/cpp/language/lambda

 

"C++11 이상에서 람다 식(람다라고도 함)은 함수에 인수로 호출되거나 전달되는 위치에서 바로 익명 함수 개체(클로저)를 정의하는 편리한 방법입니다. 일반적으로 람다는 알고리즘 또는 비동기 함수에 전달되는 몇 줄의 코드를 캡슐화하는 데 사용됩니다. 이 문서에서는 람다를 정의하고 다른 프로그래밍 기술과 비교합니다. 해당 장점을 설명하고 몇 가지 기본 예제를 제공합니다."

출처 : https://docs.microsoft.com/ko-kr/cpp/cpp/lambda-expressions-in-cpp?view=msvc-160 

 

Lambda 식은 C++외에도 C#, JAVA 등에서도 사용이 되는데,  C++에서는 C++11이상부터 적용된 방법입니다.

구조를 자세히 살펴보면,  아래와 같이 생긴 식입니다.

[capture](parameters) -> return_type { function_body }

1. [Capture] : Introducer capture 변수 캡처
2. (Parameters) : 인자 목록
3. -> return_type : 리턴 타입
4. { function_body } : 람다 본문

으로 이뤄져 있습니다.

이를 간단한 예제로 만들어 보겠습니다.

[](int x, int y) { return x + y; }

 

좀 더 자세한 예제를 확인하기 위해 지금 제가 보고 있는 코드를 보면...

// callable
std::function<Accessible*(Dali::Actor)> ConvertingFunctor = [](Dali::Actor) -> Accessible* {
  return nullptr;
};

...

// main code
auto accessible = ConvertingFunctor(actor);

여기서
[](Dali::Actor) -> Accessible* {
  return nullptr;
};

Dali::Actor를 인자로 받아 nullptr로 초기화된 Accessible* 로 변환하여 리턴하는 Lambda 식입니다. 간단하쥬?

그렇담 std::function은 무엇일까요?

다음 페이지에서 살펴보겠습니다. (링크)

'SW 지식 > C 와 C++ 공부' 카테고리의 다른 글

[C++] emplace 함수  (0) 2021.09.23
[C++] unordered_map 컨테이너  (0) 2021.09.23
[C++] std::function 은 무엇일까  (0) 2021.09.16
[C++] mutable 변수  (0) 2021.09.03
[C++] String의 substr  (0) 2021.09.02