[C++] lambda 식

2021. 3. 30. 12:46 기타/C++

 

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

 

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

 

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

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

 

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

 sort(x, x+n,
        [](float a, float b){
            return (abs(a) > abs(b));
        });

 

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



출처: https://engkimbs.tistory.com/62?category=688856 [새로비]

'기타 > 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