람다 함수

하루공부·2024년 1월 25일
0

C++

목록 보기
25/25
post-thumbnail

C++ 아이콘 제작자: Darius Dan - Flaticon


람다 함수

  • 람다함수 -> [캡처](매개변수) -> 리턴값 { 함수 몸체 }

    함수 포인터처럼 많이 사용한다.
    람다 함수는 익명 함수이기 때문에 정의만 하면 그 자체로 함수 주소를 리턴하고 어떤 임의의 함수 포인터에 람다 함수를 담아 두어야 한다.

    매개변수가 없으면 () 생략가능, 리턴값도 컴파일이 추론만 가능한 로직이라면 생략가능
    [](int a) { // 함수 내용} ->와 리턴값을 같이 생략함

auto func = []() -> void {cout << "Hello, World!\n"; };

func는 함수 포인터가 되며 정의된 이 람다 함수를 func 이름으로 실행시킬 수가 있게 된다.
“Hello World!”를 출력하는 기능을 하는 함수를 func에 담은 것. 실행은 func()로 해야 “Hello World!”이 출력된다.

정의와 동시에 뒤에 ()을 붙여 실행까지 하면 이제 그 함수가 실행된다.
익명 함수이므로 정의와 실행을 동시에 하면 1 회 실행 하고 사라진다.
[]{cout << "Hi" ; }();

캡처

  • 람다 함수 밖에 있는 데이터를 가져와서 람다 함수 내부에서 사용할 수 있는데 캡처 부분에서 어떤 데이터를 가져올지 작성한다.

    • [&]
      & 만 써주면 외부에 정의 되어 있는 모든 변수들을 레퍼런스 형태로 람다 함수 내부에 가져 오겠다는 의미
    • [&a] 외부에 정의 되어 있는 a라는 변수를 레퍼런스 형태로 람다 함수 내부에 가져 오겠다는 의미
    • [=]
      = 만 써주면 외부에 정의 되어 있는 모든 변수들을 복사한 값으로 람다 함수 내부에 가져 오겠다는 의미
    • [=a] 외부에 정의 되어 있는 a 라는 변수를 복사한 값으로 람다 함수 내부에 가져 오겠다는 의미
    • [this]
      클래스 내에서 람다 함수가 사용될 때 멤버 변수들을 람다 함수 내부에서 사용하고 싶을 때는 [this] 이런식으로 가져오기도 한다.

  • for_each 문에서 자주 사용됨
    ㄴ 전달할 함수를 따로 정의하지 않고 매개변수에서 바로 람다함수를 만들어서 전달하면 간단하고 편하다.

공부한 내용 복습

개인 공부 기록용 블로그입니다.
틀린 부분 있으다면 지적해주시면 감사하겠습니다!!

0개의 댓글