람다 식(Lambda Expression)

2022. 3. 3. 01:52C++

쉽게 말해서는 이름 없는 함수다.

쉽게 일회용 함수라고 생각하면 된다.

 

[<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