c++ 람다

RuuNee
|2023. 2. 7. 18:38
반응형

 c++ 11이상 부터 람다 표현식이라는 익명의 함수를 호출할 수 있는 기능을 지원.

 

 

람다 표현식 문법 

 

[캡쳐 블록](파라미터 목록) mutable 익셉션_목록 -> 리턴 타입 { 람다 함수 바디 }
이 름 설  명
캡쳐 블록 람다 함수 안에서 참조할 바깥 변수를 지정합니다. 여기서 지정한 변수를 람다 함수 바디에서 
호출 할 수 있습니다. 자세한 설명을 아래에서 진행합니다. 
파라미터 목록 람다 함수 호출에서 사용할 파라미터 목록을 지정합니다. (일반적인 함수의 파라미터와 비슷)
mutable 키워드(생략 가능) 캡쳐 블록에서 복사한 복제본은 기본적으로 const타입을 가지기 때문에 수정 할 수 없습니다.
하지만 람다 함수에 mutable을 붙이면 const속성이 제거되어 수정 할 수 있습니다. 
익셉션 목록(생략 가능) 람다 표현식에서 throw할 수 있는 익셉션의 종류를 지정합니다. 
리턴타입(생략 가능) 람다 표현식의 리턴 타입을 지정합니다. 리턴이 생략되면 컴파일러가 추론해서 지정합니다. 
람다 함수 바디  람다 표현식이 실제적으로 수행할 구문입니다. 

 

closure(클로저)

 람다에 의해 만들어진 실행시점의 객체를 closure라고 합니다.

 

 

캡쳐 블록

 람다의 캡쳐 블록에 대해서 자세히 알아 봅니다.

 람다는 호출되는 스코프 범위에서 존재하는 변수들을 캡쳐 할 수 있습니다. 그리고 대상을 값으로 캡쳐 할 것인지

 참조로 캡쳐할 것인지 설정 할 수 있습니다.

 

Scope내의 모든 변수 캡쳐

  • [=]
    • 스코프 내의 모든 변수를 값 복사 합니다.
    • 멤버함수에서 람다가 호출 된다면 this 포인터도 전달됩니다. 
  • [&]
    • 스코프 내의 모든 변수를 참조로 복사합니다.

 

 

Scope내의 일반 변수 캡쳐

  • [&x]
    • 변수 x만 참조로 캡쳐합니다. 다른 변수는 캡쳐하지 않습니다.
  • [x]
    • 변수 x만 값을 캡쳐합니다. 다른 변수는 캡쳐하지 않습니다. 
  • [=, &x]
    • 모든 변수는 기본으로 값으로 캡쳐하고 x변수만 참조로 캡쳐합니다. 
  • [&, x]
    • 모든 변수는 기본으로 참조로 캡쳐하고 x변수만 값으로 캡쳐합니다. 
  • [this]
    • 클래스 멤버 함수인 경우 자기 자신을 전달합니다. ( [=]로도 전달 됨 )

 캡쳐는 람다가 생성되는 scope 안에서 보이는 지역 변수에만 적용됩니다. 

 (static 이나 전역변수는 따로 정의하지 않아도 접근 가능)

 

 

https://docs.microsoft.com/ko-kr/cpp/cpp/lambda-expressions-in-cpp?view=vs-2019 

 

C++ 람다 식

자세한 정보: C++의 람다 식

learn.microsoft.com

 

 

https://docs.microsoft.com/ko-kr/cpp/cpp/examples-of-lambda-expressions?view=vs-2019

 

람다 식의 예

자세한 정보: 람다 식의 예

learn.microsoft.com

 

반응형

'C++' 카테고리의 다른 글

C++ 20 : Module(중요)  (0) 2024.05.14
C++ 20 : Concept(중요)  (0) 2024.05.14
C++ 20  (0) 2024.05.14
lvalue, rvalue  (0) 2024.01.05
스마트 포인터  (0) 2023.01.27