> 백엔드 개발 > C++ > C에서 Lambda Expressions and Function Objects (Functors)를 어떻게 사용합니까?

C에서 Lambda Expressions and Function Objects (Functors)를 어떻게 사용합니까?

Robert Michael Kim
풀어 주다: 2025-03-12 16:54:15
원래의
811명이 탐색했습니다.

c에서 lambda 표현식 및 기능 객체 (functors)를 사용하는 방법

Lambda 표현식은 익명 기능 객체를 만드는 간결한 방법을 제공합니다. 그들은 종종 그들이 사용하는 상황 내에서 인라인으로 정의됩니다. 구문은 일반적으로 다음과 같습니다.

 <code class="c  ">[capture list](parameter list) -> return type { function body };</code>
로그인 후 복사
  • 캡처 목록 : Lambda 내에서 액세스 할 수있는 주변 범위에서 변수를 지정합니다. 옵션은 다음과 같습니다.

    • [] : 아무것도 캡처하지 않습니다.
    • [=] : 주변 범위의 모든 변수를 값으로 캡처합니다.
    • [&] : 주변 범위의 모든 변수를 참조별로 캡처합니다.
    • [=, &var1, &var2] : var1var2 제외한 모든 값별로 참조로 캡처합니다.
    • [var1, &var2] : var1 값으로 캡처하고 var2 참조하십시오.
  • 매개 변수 목록 : 일반 기능 매개 변수와 유사합니다.
  • 반환 유형 : -> 후에 명시 적으로 지정하거나 컴파일러에 의해 암시 적으로 추론 될 수 있습니다.
  • 기능 본문 : Lambda가 실행 한 코드.

예:

 <code class="c  ">#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> numbers = {1, 2, 3, 4, 5}; std::for_each(numbers.begin(), numbers.end(), [](int x){ std::cout </int></algorithm></vector></iostream></code>
로그인 후 복사

functors 또는 function 객체는 함수 통화 연산자 ( operator() )에 과부하가 걸리는 클래스입니다. 이를 통해 클래스의 인스턴스는 함수처럼 호출 될 수 있습니다.

예:

 <code class="c  ">#include <iostream> #include <vector> class Doubler { public: void operator()(int x) { std::cout  numbers = {1, 2, 3, 4, 5}; Doubler doubler; std::for_each(numbers.begin(), numbers.end(), doubler); // Output: 2 4 6 8 10 std::cout </vector></iostream></code>
로그인 후 복사

C에서 Lambda Expressions와 Functors를 사용하는 것의 실질적인 차이점은 무엇입니까?

주요 차이점은 간결함과 범위에 있습니다. Lambda 표현식은 간단한 작업에 훨씬 더 작기 때문에 별도의 클래스를 정의 할 필요가 없습니다. 또한 범위 내에서 암시 적으로 정의되어 일회성 작업에 이상적입니다. 반면에 FUNCTORS는 명시 적으로 정의 된 클래스로,보다 복잡한 논리, 상태를 유지하기위한 멤버 변수 및 코드의 여러 부분에서 잠재적 재사용을 허용합니다. Lambdas는 일반적으로 주변 범위에서 포착 된 것 이상 상태를 유지하는 능력이 제한적입니다. 함수는 수명주기 전체에 상태를 저장하고 조작 할 멤버 변수를 가질 수 있습니다.

C에서 Functors보다 Lambda 표현식을 언제 선호해야합니까?

Lambda 표현을 선호합니다.

  • 한 번만 사용되는 단순하고 짧은 익명 기능이 필요합니다.
  • 주변 범위에서 변수를 캡처해야합니다.
  • 간결함이 우선 순위입니다.

다음과 같은 경우 functors를 선호합니다.

  • 여러 방법이나 내부 상태를 가진보다 복잡한 기능이 필요합니다.
  • 코드의 여러 부분에서 기능을 재사용해야합니다.
  • 함수 호출간에 상태를 유지해야합니다.
  • 상속 또는 다형성과 같은 고급 기능이 필요합니다.

모든 C 시나리오에서 Lambda 표현식 및 기능을 서로 바꾸게 사용할 수 있습니까? 그렇지 않다면 왜 그렇지 않습니까?

아니요, 항상 Lambda 표현식과 기능을 서로 바꿔서 사용할 수는 없습니다. 둘 다 기능 객체를 나타내지 만 기능은 다릅니다. Lambdas는 간결하고 인라인 자연에서 탁월하며 짧고 간단한 작업에 이상적입니다. 그러나 본격적인 클래스의 유연성이 부족합니다. 클래스 인 함수는 상태 관리, 회원 기능 및 재사용성에 대한 통제력을 더 많이 제공하지만 더 많은 보일러 플레이트 코드를 소개합니다. 따라서 선택은 특정 작업의 복잡성과 요구 사항에 따라 다릅니다. Stateful Operations를 사용한 복잡한 기능은 Functor에 더 적합한 반면 간단한 일회성 사용 작업은 Lambda의 간결성으로부터 이점을 얻습니다.

위 내용은 C에서 Lambda Expressions and Function Objects (Functors)를 어떻게 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿