2022. 3. 3. 01:52ㆍC++
쉽게 말해서는 이름 없는 함수다.
쉽게 일회용 함수라고 생각하면 된다.
[<captures>](<parameters>) <specifiers> -> <return_type>
{
<body>
}
captures = 캡처 블록
parameters = 매개변수 목록(선택 사항)
specifiers = 지정자(선택 사항)
return_type = 반환 형(선택 사항)
body = 함수 바디
캡처 블록 : 람다 식을 품는 범위 안에 있는 변수를 람다 식에 넣어줄 때 사용
- 종류:
- [] 비어있음
- [=] 값에 의한 캡처. 모든 외부 변수 캡처, 람다 식 안에서 수정X
- [&] 참조에 의한 캡처, 모든 외부 변수를 캡처
- [<변수 이름>] 특정 변수를 값으로 캡처, 람다 식 안에서 수정X
- [&<변수 이름>] 특정 변수를 참조로 캡처
- 캡처 옵션은 섞어 쓸 수 있다.
- ex) [=, &score1] -> 모든 변수를 값에 의하 캡처하되 score1은 참조로 가져오자
매개변수 목록
- 빈 괄호 생략 가능
- ex) auto add = [](int a, int b) { return a+b;};
- add(score1,score2); 로 사용
지정자
- 선택 사항이다
- mutable : 값에 의한 캡처된 개체를 수정 가능하게 해준다.
반환형
- 선택 사항
- 반환 형을 적지 않으면 반환문을 통해 유추해준다.
- 자동이다.
람다식의 장점 : 간단한 함수를 빠르게 작성
람다식의 단점 : 디버깅하기 어렵다, 함수 재사용성이 낮다, 눈에 잘 안보이면 만들어진지 몰라 코드 중복이 발생가능.
즉, 기본적으로 이름있는 함수를 사용하며, 자잘한 한 줄 짜리 함수는 람다를 써도 된다.
sort같은 STL 컨테이너 매개변수로 전달하는 함수로는 사용하기 좋다.
'C++' 카테고리의 다른 글
파일 시스템 (0) | 2022.03.04 |
---|---|
가변 인자 템플릿 (0) | 2022.03.04 |
C++ constexpr (0) | 2022.03.02 |
이동 생성자 및 이동 대입 연산자 (0) | 2022.02.19 |
C++ 스마트 포인터 (0) | 2021.12.28 |