>백엔드 개발 >C++ >C++ 함수 포인터 및 람다 표현식: 콜백의 마법 발견

C++ 함수 포인터 및 람다 표현식: 콜백의 마법 발견

王林
王林원래의
2024-04-29 13:42:01386검색

함수 포인터와 람다 표현식 모두 함수를 콜백 함수에 인수로 전달할 수 있습니다. 함수 포인터는 함수의 주소를 가리키는 변수를 보유하는 반면, 람다 표현식은 즉시 함수를 정의하는 익명 함수 개체입니다. 실제 예제를 통해 함수 포인터와 람다 표현식을 사용하여 배열 요소를 합하는 방법을 보여줍니다. 이러한 기술은 유연하고 확장 가능한 C++ 코드를 작성하는 데 필수적입니다.

C++ 函数指针与 lambda 表达式:揭晓回调魔法

C++ 함수 포인터 및 람다 표현식: 콜백 마법 발견

소개
함수 포인터와 람다 표현식은 C++에서 중요한 역할을 하며, 함수를 매개변수로 콜백 함수에 전달할 수 있습니다. 이 기사에서는 함수 포인터와 람다 표현식을 심층적으로 살펴보고 실제 예제를 통해 실제 사용법을 보여줍니다.

함수 포인터
함수 포인터는 함수의 주소를 담고 있는 변수입니다. 다른 변수와 마찬가지로 함수를 값으로 전달할 수 있습니다. 함수 포인터를 선언하려면 다음 형식을 따르세요.

// 指向具有指定签名的函数的指针
typedef int (*fptr)(int);

lambda 표현식
lambda 표현식은 함수가 필요할 때마다 즉시 함수를 정의할 수 있는 익명 함수 개체입니다. 해당 구문은 다음과 같습니다.

[capture-list](parameter-list) -> return-type { body };

실용 사례

다음은 함수 포인터와 람다 표현식을 사용하여 배열의 요소를 합산하는 방법을 보여주는 실제 사례입니다.

코드 조각 1: 함수 포인터 사용

#include <iostream>

// 求和函数
int sum(int a, int b) { return a + b; }

// 使用函数指针
using namespace std;

int main() {
  int arr[] = {1, 2, 3, 4, 5};
  int size = sizeof(arr) / sizeof(arr[0]);

  // 指向求和函数的函数指针
  int (*ptr)(int, int) = &sum;

  int total = 0;
  for (int i = 0; i < size; i++) {
    total += ptr(arr[i], arr[i + 1]);
  }

  cout << "Total: " << total << endl;
  return 0;
}

코드 조각 2: 람다 식 사용

#include <iostream>

// 使用 lambda 表达式
using namespace std;

int main() {
  int arr[] = {1, 2, 3, 4, 5};
  int size = sizeof(arr) / sizeof(arr[0]);

  int total = 0;
  for (int i = 0; i < size; i++) {
    total += [](int a, int b) -> int { return a + b; }(arr[i], arr[i + 1]);
  }

  cout << "Total: " << total << endl;
  return 0;
}

코드 이해하기
코드 조각 1에서는 함수 포인터ptr 来保存指向求和函数 sum 的地址。我们遍历数组,将每个元素及其后续元素传递给 ptr。求和函数返回两个元素的总和,将其添加到 total를 사용합니다.

스니펫 2에서는 람다 표현식을 사용하여 익명 합계 함수를 정의합니다. 함수 포인터와 달리 람다 식은 필요할 때 즉시 함수를 정의합니다. 스니펫 1과 동일한 방식으로 배열을 반복하여 요소를 람다 표현식에 전달하여 합계를 계산합니다.

결론
함수 포인터와 람다 표현식은 함수를 콜백 함수에 전달하는 데 중요합니다. 함수 포인터는 간단한 변수를 통해 함수를 전달하는 메커니즘을 제공하는 반면, 람다 식을 사용하면 익명 함수를 동적으로 정의할 수 있습니다. 이러한 기술을 이해하면 유연하고 확장 가능한 C++ 코드를 작성할 수 있습니다.

위 내용은 C++ 함수 포인터 및 람다 표현식: 콜백의 마법 발견의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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