더북(TheBook)

1.8.2 람다 표현식

람다 표현식은 익명 함수를 정의한다. 람다 표현식으로 정의한 함수는 람다 표현식 바깥 범위에 있는 변수들을 캡처하고 접근할 수 있다는 점에서 일반 함수와 다르다. 람다 표현식은 STL 알고리즘에서 자주 사용된다. double 타입으로 된 수치 값의 세제곱(x3)을 계산하는 기능을 함수에 전달해야 한다고 생각해보자. 람다 표현식으로는 이렇게 쓸 수 있다.

[] (double value) -> double { return value*value*value; }

[]는 람다 소개자(lambda introducer)라고 한다. 이는 람다 표현식의 시작을 표시한다. 람다 소개자는 코드에 쓰인 것보다 더 많은 것을 할 수 있다. 예를 들어 []는 항상 빈 괄호로만 쓰이지 않는다. 람다 소개자 다음에는 () 사이에 람다 매개변수 목록을 쓴다. 여기서는 매개변수를 value 하나만 썼지만, 매개변수가 여러 개라면 ,로 구분해서 쓴다. 또한, 람다 표현식에 쓸 매개변수에 기본값을 지정할 수 있다.

매개변수 목록 다음에 {} 사이에 람다 표현식의 본문을 쓴다. 본문은 일반 함수와 같다. 람다 표현식의 본문에는 문장 하나만 쓰거나 값을 계산해서 돌려주는 return 문을 쓸 수 있다. 일반적으로 람다 본문에 문장을 얼마든지 쓸 수 있다. 위 예제에서는 반환 타입을 지정하지 않았다. 반환 타입은 반환되는 값의 타입이 기본으로 정해진다. 반환하는 게 없으면 void가 반환 타입이 된다. 후행 반환 형식(trailing return type)을 사용해서 반환 타입을 지정할 수도 있다. 람다 표현식에 후행 반환 형식은 다음과 같이 지정하면 된다.

auto cube = [] (double value) { return value*value*value; };
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.