[C++] lambda 식


C++11부터 지원하는 람다식은 익명 함수를 정의하는 식입니다. 익명 함수는 람다라고 불립니다. 익명 함수, 즉 람다는 함수의 몸체는 있지만 이름이 없습니다. (어떤 책을 읽어보면 람다식은 "변수에 저장할 수 있는 로직이다"라고 정의합니다.)


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


1. 코드 상으로 별도의 클래스를 구현하지 않아도 된다.

2. 변수의 상태 유지가 가능하다.


다음은 람다 함수의 예시입니다. 


STL의 predicate 부분에 람다 함수를 작성함으로써 sort 함수가 어떤 기준으로 정렬할 것인 지를 명시했습니다.


아래는 MSDN에 있는 람다식 구문입니다.



  1. 캡처 절(C++ 사양에서는 lambda-introducer라고도 함) : 바깥쪽 범위의 변수에 접근하거나 캡처와 관련된 절입니다. 캡처란 여기서는 대입이라고 쉽게 생각하면 됩니다. 다음과 같이 사용되죠.  &와 =로 어떤 변수를 캡처를 할 지, 접근을 할 지 결정합니다.

  2. 매개 변수 목록 선택 사항입니다 (lambda declarator라고도 함) : 매개 변수들을 정의한 목록입니다.

  3. mutable specification 선택 사항입니다 : 기본적으로 lambda는 값 단위 상수지만 (const 인) mutable을 사용할 경우 내부에서 변경 가능합니다.

  4. exception-specification 선택 사항입니다 : 람다 식이 어떤 예외도 throw하지 않음을 나타내기 위해 throw() 예외 사양을 사용할 수 있습니다.

  5. trailing-return-type 선택 사항입니다 : 말 그대로 반환 형식입니다.

  6. lambda body : 람다 함수의 몸체 부분입니다. 일반 함수의 몸체라고 생각하면 됩니다.


참조 : http://blog.naver.com/PostView.nhn?blogId=psychoria&logNo=40171894460

   https://msdn.microsoft.com/ko-kr/library/dd293608.aspx

   http://carstart.tistory.com/183

'Language & Solution > C++' 카테고리의 다른 글

[C++] 얕은 복사, 깊은 복사  (0) 2017.05.14
[C++] virtual function 동작 방식  (0) 2017.05.13
[C++] lambda 식  (0) 2017.04.18
[C++] vector쓸 시 주의할 점  (0) 2017.04.14
[C++] 시간 측정  (0) 2017.04.14
[C++] 표준 출력 정확도 조정  (0) 2017.04.14

이 글을 공유하기

댓글(0)

Designed by JB FACTORY