Lambda 표현식은 익명 기능 객체를 만드는 간결한 방법을 제공합니다. 그들은 종종 그들이 사용하는 상황 내에서 인라인으로 정의됩니다. 구문은 일반적으로 다음과 같습니다.
<code class="c ">[capture list](parameter list) -> return type { function body };</code>
캡처 목록 : Lambda 내에서 액세스 할 수있는 주변 범위에서 변수를 지정합니다. 옵션은 다음과 같습니다.
[]
: 아무것도 캡처하지 않습니다.[=]
: 주변 범위의 모든 변수를 값으로 캡처합니다.[&]
: 주변 범위의 모든 변수를 참조별로 캡처합니다.[=, &var1, &var2]
: var1
및 var2
제외한 모든 값별로 참조로 캡처합니다.[var1, &var2]
: var1
값으로 캡처하고 var2
참조하십시오.->
후에 명시 적으로 지정하거나 컴파일러에 의해 암시 적으로 추론 될 수 있습니다.예:
<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>
주요 차이점은 간결함과 범위에 있습니다. Lambda 표현식은 간단한 작업에 훨씬 더 작기 때문에 별도의 클래스를 정의 할 필요가 없습니다. 또한 범위 내에서 암시 적으로 정의되어 일회성 작업에 이상적입니다. 반면에 FUNCTORS는 명시 적으로 정의 된 클래스로,보다 복잡한 논리, 상태를 유지하기위한 멤버 변수 및 코드의 여러 부분에서 잠재적 재사용을 허용합니다. Lambdas는 일반적으로 주변 범위에서 포착 된 것 이상 상태를 유지하는 능력이 제한적입니다. 함수는 수명주기 전체에 상태를 저장하고 조작 할 멤버 변수를 가질 수 있습니다.
Lambda 표현을 선호합니다.
다음과 같은 경우 functors를 선호합니다.
아니요, 항상 Lambda 표현식과 기능을 서로 바꿔서 사용할 수는 없습니다. 둘 다 기능 객체를 나타내지 만 기능은 다릅니다. Lambdas는 간결하고 인라인 자연에서 탁월하며 짧고 간단한 작업에 이상적입니다. 그러나 본격적인 클래스의 유연성이 부족합니다. 클래스 인 함수는 상태 관리, 회원 기능 및 재사용성에 대한 통제력을 더 많이 제공하지만 더 많은 보일러 플레이트 코드를 소개합니다. 따라서 선택은 특정 작업의 복잡성과 요구 사항에 따라 다릅니다. Stateful Operations를 사용한 복잡한 기능은 Functor에 더 적합한 반면 간단한 일회성 사용 작업은 Lambda의 간결성으로부터 이점을 얻습니다.
위 내용은 C에서 Lambda Expressions and Function Objects (Functors)를 어떻게 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!