>백엔드 개발 >C++ >STL 함수 객체와 C++ 람다 표현식의 차이점은 무엇입니까?

STL 함수 객체와 C++ 람다 표현식의 차이점은 무엇입니까?

PHPz
PHPz원래의
2024-04-25 12:18:01581검색

함수 개체와 람다 식은 모두 익명 함수를 생성하는 도구입니다. 주요 차이점은 다음과 같습니다. 구문: 함수 개체는 클래스 정의를 사용하는 반면 람다 식은 [] 구문을 사용합니다. 범위: 함수 개체는 클래스 외부에서 사용할 수 있지만 람다 식은 정의 범위로 제한됩니다. 캡처: 함수 개체는 외부 변수를 캡처할 수 없지만 람다 식은 캡처 목록을 통해 캡처할 수 있습니다. 오버헤드: 함수 개체 생성 오버헤드가 낮고 람다 식 오버헤드가 높습니다. 재사용성: 함수 개체는 일반적으로 재사용이 가능하며 람다 식은 일반적으로 일회용입니다.

STL 函数对象与 C++ lambda 表达式的区别是什么?

STL 함수 개체와 C++ 람다 식의 차이점

함수 개체와 람다 식은 모두 C++에서 익명 함수를 만드는 데 사용되는 도구입니다. 유사점이 있지만 중요한 차이점도 있습니다.

Syntax

  • 함수 개체: 클래스를 사용하여 선언합니다.
  • lambda 표현식: [] 구문을 사용하여 정의됩니다.

Scope

  • 함수 개체: 수업 밖에서도 사용할 수 있습니다.
  • lambda 표현식: 은 정의된 범위 내에서만 유효합니다.

Capture

  • 함수 개체: 외부 변수를 캡처할 수 없습니다.
  • lambda 표현식: 외부 변수는 캡처 목록을 통해 캡처할 수 있습니다.

Overhead

  • 함수 개체: 낮은 생성 오버헤드.
  • lambda 표현식: 클로저 생성이 필요하기 때문에 생성 비용이 많이 듭니다.

재사용성

  • 함수 개체: 일반적으로 재사용이 가능합니다.
  • 람다 표현: 보통 일회용입니다.

실용 사례

정수 배열이 있고 특정 조건을 충족하는 첫 번째 요소(예: 10보다 큰 첫 번째 요소)를 찾고 싶다고 가정해 보겠습니다.

함수 개체 사용:

class GreaterThan10 {
public:
    bool operator()(int x) { return x > 10; }
};

int main() {
    int arr[] = {1, 5, 7, 12, 14};
    auto found = find_if(begin(arr), end(arr), GreaterThan10());
    if (found != end(arr)) {
        cout << "First number greater than 10: " << *found << endl;
    }
    return 0;
}

람다 식 사용:

int main() {
    int arr[] = {1, 5, 7, 12, 14};
    auto found = find_if(begin(arr), end(arr), [](int x) { return x > 10; });
    if (found != end(arr)) {
        cout << "First number greater than 10: " << *found << endl;
    }
    return 0;
}

이 예에서는 람다 식을 사용하여 정수가 10보다 큰지 확인하는 익명 함수를 만듭니다.

위 내용은 STL 함수 객체와 C++ 람다 표현식의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.