函数指针和 Lambda 表达式都是 C 中封装代码块的技术,各有不同。函数指针是指向函数内存地址的常量指针,而 Lambda 表达式是匿名函数,语法更灵活,可捕获外部变量。函数指针适合类型安全和低开销的场景,Lambda 表达式适合需要匿名性和捕获外部变量的场景。
简介
在 C 中,函数指针和 lambda 表达式都是用于封装代码块的技术,但在语法和使用方式上有所不同。
函数指针
函数指针是一种指向函数内存地址的常量指针。它允许将函数作为参数传递或存储在数据结构中。
Lambda 表达式
Lambda 表达式是一种匿名函数,使用特殊的语法定义。它们通常用于创建可以作为回调或过滤器传递的小型代码块。
比较
特征 | 函数指针 | Lambda 表达式 |
---|---|---|
语法 | int (*func)(int) |
[](int x) { return x * x; } |
匿名性 | 非匿名 | 匿名 |
捕获性 | 不能捕获外部变量 | 可以捕获外部变量 |
类型安全性 | 类型安全 | 类型安全性弱 |
实战案例
函数指针作为参数:
void sort(int arr[], int size, int (*comp)(int, int)) { // 使用函数指针作为比较函数进行排序 ... } int compareAsc(int a, int b) { return a - b; } int main() { int arr[] = {5, 2, 8, 3, 1}; sort(arr, 5, compareAsc); ... }
Lambda 表达式作为回调:
std::vector<int> numbers = {1, 2, 3, 4, 5}; auto even = [](int x) { return x % 2 == 0; }; std::vector<int> evenNumbers = std::remove_if(numbers.begin(), numbers.end(), even); ...
结论
函数指针和 lambda 表达式是 C 中用于封装代码块的有用工具。函数指针适用于需要类型安全和低开销的场景,而 lambda 表达式则更适合需要匿名性和捕获外部变量的场景。
以上是C++ 函数指针与 lambda 表达式的比较和对比是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!