반응형
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 |