한줄 요약 : 함수 객체를 빠르게 만드는 문법. 일종의 익명 함수이다.
람다 자체로 C++11에 새로운 기능이 들어간 것은 아니다.
// 기본형태 : [캡처](매개변수)->리턴값{함수내용;};
// 리턴값은 생략 가능
[](Item& item) { return item._rarity == Rarity::UNIQUE; };
// 람다에 의해 만들어진 실행시점 객체 = 클로저(closure)
auto isUniqueLambda = [](Item& item) { return item._rarity == Rarity::UNIQUE; };
만들어진 람다 객체는 클로저(closure)라고 한다.
// 값 복사 방식
int itemId = 4;
auto findByItemIdLambda = [=](Item& item) // 기본 캡처 모드
{
return item._itemId == itemId; // itemId = 4
};
itemId = 10;
// -----
// 참조 방식
int itemId = 4;
auto findByItemIdLambda = [&](Item& item) // 기본 캡처 모드
{
return item._itemId == itemId; // itemId = 10
};
itemId = 10;
[ ] 캡처 : 함수 객체 내부에 변수를 저장하는 개념과 유사하다. 값 복사 방식(=), 참조 방식(&)
int itemId = 4;
Rarity rarity = Rarity::UNIQUE;
ItemType type = ItemType::WEAPON;
auto findByItem = [&itemId, rarity, type](Item& item)
{
return item._itemId == itemId && item._rarity == rarity && item._type == type;
};
변수마다 캡처 모드를 지정해서 사용할 수도 있다.
int itemId = 4;
Rarity rarity = Rarity::UNIQUE;
ItemType type = ItemType::WEAPON;
auto findByItem = [=, &type](Item& item) // 기본은 값 복사, type만 참조 방식 지정
{
return item._itemId == itemId && item._rarity == rarity && item._type == type;
};
기본 캡처 모드에 추가로 특정 변수만 캡처 모드를 지정할 수도 있다.
하지만 C++에서는 기본 캡처 모드 사용을 지양하라고 권고한다.
'C++ > Rookiss C++' 카테고리의 다른 글
[Modern C++] 스마트 포인터 (smart pointer) -完- (0) | 2022.09.01 |
---|---|
[Modern C++] 전달 참조(forwarding reference) (0) | 2022.08.31 |
[Modern C++] 오른값 참조 (rvalue reference) (0) | 2022.08.31 |
[Modern C++] #2 (0) | 2022.08.31 |
[Modern C++] #1 (0) | 2022.08.31 |