lambda expression (람다 표현식)

lambda expression

  • C++11 에서 새로 지원하는 이름 없는 함수 객체

  • C++ 함수 객체를 간단하게 생성할 수 있다.

  • [captures] (params) -> ret { body }

    • captures: 람다 표현식 외부 변수 접근 방법
      • [=] : 복사
      • [&] : 참조
      • [] : 비운거
    • params: 인자가 없으면 0 생략 가능
    • ret: 반환형이 명확할 경우 ret 생략가능
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

suing namespace std;

int main(void)
{
	[] {}; // 인자가 없고 return type도 명확(void) 아무것도 리턴하지 않고 아무것도 안함
    // void f() {} 의 개념과 비슷하다.
    
    [] {} (); // 람다함수를 호출하려면 ()
    [] {} -> void {} (); // 위와 동일한 동작
	
    [] (double a) { cout << a * a << endl; } (3.0); // 3.0 이 a로 전달되는 것으로 이해
    
    return 0
}
  • 람다 표현식 함수는 보통 함수 객체의 포인터를 받거나 함수 객체를 받는 함수에서 주로 사용한다.

    함수 객체 : () 연산자를 오보로딩하여 만든 클래스


...

int main(void)
{
	...
    sort(v.begin(), v.end(), [](const Person& p1, const Person& p2){
    				return p1.name < p2.name;});
}
  • 간단한 함수에 대해서는 람다 표현식으로 쓰는게 가독성이 좋을 수 있다.

좋은 웹페이지 즐겨찾기