Lambda Expression

headkio·2020년 9월 20일
0

C++

목록 보기
31/35
post-thumbnail

Lambda Expression ?

이름이 없는 함수 개체
내포되는 함수
재활용하지 않을 일회성 함수를 간편하게 작성하는 방법

구성

[Capture](Parameter) <specifier> -> <return_type>
{
  <body>
}

capture

[] 안에 외부 변수 Capture 방식을 지정한다.

int x = 1;
int y = 2;

[](){ std::cout << "No captureing" << std::endl; };
[=]() { return x > y ? x : y }; // 값에 의한 캡쳐 
[=]() { x = 3 }; // 값 캡쳐 방식 -> 값을 바꿀 수 없다.

[&]() { x = 3; }; // 참조 캡처 방식 -> 값 변경 가능

[x]() { std::cout << x << std::endl; }; // 특정 값 캡쳐
[x]() { std::cout << x << y << std::endl; }; // 특정 값 캡쳐

[=, &y]() // 혼합 방식
{
  y = 3;
  std::cout << x << y << std::endl;  
}

parameter

[] { std::cout << "lol" << std::endl; } // () 생략 가능
auto myFunc = [] (int x, int y) { return x + y; };
myFunc(a, b);

specifier

mutable

값에 의한 캡쳐 개체를 수정할 수 있게 해준다.
괜찮은 언어 디자인이나 기존 c++ 방식과 반대된다.

[x]() mutable { std::cout << ++x << endl; };

return_type

반환형을 지정해 준다.
안적어도 유추해주지만 비추.

단점

  • 디버깅이 힘들다. -> 함수 이름이 안나옴.
  • 함수 재사용성이 낮다.
  • 사람들은 보통 함수 이름을 찾아보면서 기존 기능들을 유추한다.

Best Practice

  • 기본적으로 이름있는 함수를 쓰자
  • 한줄짜리 자잘한 함수는 람다.
  • sort같이 매개변수 전달 함수들은 람다.
profile
돌아서서 잊지말고, 잘 적어 놓자

0개의 댓글