한줄 요약 : 함수 객체를 빠르게 만드는 문법. 일종의 익명 함수이다.

람다 자체로 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++에서는 기본 캡처 모드 사용을 지양하라고 권고한다.

+ Recent posts