[C++] lambda 식
C++11부터 지원하는 람다식은 익명 함수를 정의하는 식입니다. 익명 함수는 람다라고 불립니다. 익명 함수, 즉 람다는 함수의 몸체는 있지만 이름이 없습니다. (어떤 책을 읽어보면 람다식은 "변수에 저장할 수 있는 로직이다"라고 정의합니다.)
람다식은 함수 포인터와 함수 객체에 비해 다음과 같은 장점이 있습니다.
1. 코드 상으로 별도의 클래스를 구현하지 않아도 된다.
2. 변수의 상태 유지가 가능하다.
다음은 람다 함수의 예시입니다.
sort(x, x+n,
[](float a, float b){
return (abs(a) > abs(b));
});
STL의 predicate 부분에 람다 함수를 작성함으로써 sort 함수가 어떤 기준으로 정렬할 것인 지를 명시했습니다.
아래는 MSDN에 있는 람다식 구문입니다.
- 캡처 절(C++ 사양에서는 lambda-introducer라고도 함) : 바깥쪽 범위의 변수에 접근하거나 캡처와 관련된 절입니다. 캡처란 여기서는 대입이라고 쉽게 생각하면 됩니다. 다음과 같이 사용되죠. &와 =로 어떤 변수를 캡처를 할 지, 접근을 할 지 결정합니다.
- 매개 변수 목록 선택 사항입니다 (lambda declarator라고도 함) : 매개 변수들을 정의한 목록입니다.
- mutable specification 선택 사항입니다 : 기본적으로 lambda는 값 단위 상수지만 (const 인) mutable을 사용할 경우 내부에서 변경 가능합니다.
- exception-specification 선택 사항입니다 : 람다 식이 어떤 예외도 throw하지 않음을 나타내기 위해 throw() 예외 사양을 사용할 수 있습니다.
- trailing-return-type 선택 사항입니다 : 말 그대로 반환 형식입니다.
- lambda body : 람다 함수의 몸체 부분입니다. 일반 함수의 몸체라고 생각하면 됩니다.
참조 : http://blog.naver.com/PostView.nhn?blogId=psychoria&logNo=40171894460
https://msdn.microsoft.com/ko-kr/library/dd293608.aspx
'기타 > C++' 카테고리의 다른 글
[C++] 스마트포인터 (0) | 2021.03.30 |
---|---|
[C++] volatile (0) | 2021.03.30 |
[C++] 얕은 복사, 깊은 복사 (0) | 2021.03.30 |
[C++] virtual function 동작 방식 (0) | 2021.03.30 |
[C++] vector쓸 시 주의할 점 (0) | 2021.03.30 |
[C++] 시간 측정 (0) | 2021.03.30 |
[C++] 표준 출력 정확도 조정 (0) | 2021.03.30 |
[C++] 범위 지정 연산자(::)와 namespace (0) | 2021.03.30 |