모던 C++에서 도입된 람다식(Lambda Expressions)에 대해 간단히 알아보는 글입니다.
람다란
- 이름이 없는 함수 Object
- nested(내포되는) 함수
형태
1
2
3
4
[<captures>](<parameters>) <specifiers> -> <return_type>
{
<body>
};
캡처 블록(Captures)
캡처 블록: 람다 식을 품는 범위(scope) 안에 있는 변수를 람다 식에 넘겨줄 때 사용
- 캡처의 종류(외부 변수에 대해): 값(=), 참조(&) / 특정 변수만 캡처 가능
매개 변수 목록(Parameters)
매개변수 목록: 생략 가능(권장하지 않음)
지정자(specifiers)
지정자: mutable(값에 의해 캡처된 개체를 수정할 수 있게 함. 원본은 수정하지 않음)
반환형(Return Type)
명시하지 않으면 컴파일러가 유추해서 지정해줌(권장하지 않음)
람다 식의 장점/단점
- 장점
- 간단한 함수를 빠르게 작성할 수 있음
- 단점
- 디버깅하기 힘들어짐(함수 콜 스택에서 보기 힘듬, 해결될 문제)
- 함수 재사용성이 낮음 -> 중복 코드 발생 가능성
언제 쓰는게 좋은가
- 기본은 이름 있는 함수를 작성/사용
- 아주 작은 함수는 람다로 써도 괜찮음. 근데 재사용 가능성이 보이면 이름있는 함수로 작성하기
- STL 컨테이너에 매개 변수로 전달할 함수들이 람다로 만들 수 있는 좋은 후보