본문 바로가기

Programming/CPP11&14

[C++11] 이름 없는 함수, 람다(Lambda)(1)

반응형

C++11에서 새롭게 추가된 문법은 람다입니다.

람다는 그리스어 알파벳의 11번째 글자로 <λ> 이런 모양으로 생겼습니다.

이미 이전 C++11 포스팅([C++11] Range-Based For Loop)에서 람다를 사용한 for_each 구문을 사용한 적이 있었습니다.

람다는 익명 함수(Anonymous Function)이라고도 부릅니다.

함수의 몸체(Body)는 있지만 이름(Name)이 없기 때문입니다.

람다는 STL의 함수 객체(Function Object 혹은, Functor)처럼 동작합니다.

함수 객체처럼 암시적으로 함수 객체 클래스를 만들고, 함수 객체를 생성해서 전달합니다.

혹시나 함수 객체를 모르시는 분은 STL을 공부하시는 것을 추천합니다.

람다는 함수 포인터와 함수 객체에 비해 다음과 같은 장점이 있습니다.

함소 포인터가 상태를 유지하는 게 불가능하고(전역 변수를 통해서 억지로는 가능합니다.)

함수 객체는 별도의 클래스를 정의해야 하는 불편함이 있습니다.

람다는 이 둘의 단점을 보완해서 장점만을 취합니다.

코드 상으로 클래스를 별도로 구현하지도 않고, 상태의 유지가 가능합니다.

람다의 구조는 다음과 같습니다.(MSDN 참조)

기존의 C++에서는 볼 수 없었던 특이한 문법을 갖고 있습니다.

순서대로 각각의 구성은 다음과 같습니다.

1. lambda-introducer(캡처(Capture) 부분)
2. lambda-parameter-declaration-list(인자 목록)
3. mutable-specification
4. exception-specification
5. lambda-return-type-clause(리턴 타입)
6. compound-statement(람다 구현 부분)

간단하게 C++11 람다의 문법에 대해서 확인해 보았는데요.

함수의 선언부에 들어갈 내용을 빼고 함수의 몸체는 기존의 함수와 크게 다른 게 없어 보입니다.

다음 글에서는 람다 문법을 자세하게 설명하고 예제로 확인하겠습니다.

이름 없는 함수, 람다(Lambda)(2) 링크는 다음과 같습니다.

2014/12/11 - [Programming/C++11&14] - [C++11] 이름 없는 함수, 람다(Lambda)(2)

반응형

'Programming > CPP11&14' 카테고리의 다른 글

[C++11] RValue Reference(1)  (0) 2014.12.14
[C++11] 이름 없는 함수, 람다(Lambda)(2)  (2) 2014.12.11
[C++11] Range-Based For Loop  (0) 2014.12.11
[C++11] auto 키워드  (0) 2014.12.10
[C++11] NULL을 대체하는 nullptr  (0) 2014.12.01