1. 函数指针:C++中的灵活回调机制
函数指针是C++中一种强大的工具,它允许我们将函数作为参数传递、存储在数据结构中,甚至实现运行时动态调用。理解函数指针对于编写灵活、可扩展的代码至关重要。
1.1 函数指针的基本语法
函数指针的声明遵循一个特定的模式:返回类型 (*指针名)(参数列表)。让我们看一个简单的例子:
cpp复制int add(int a, int b) {
return a + b;
}
int (*funcPtr)(int, int) = &add;
这里,funcPtr是一个指向接受两个int参数并返回int的函数的指针。我们可以这样使用它:
cpp复制int result = funcPtr(3, 4); // 结果为7
注意:虽然&add和add在函数指针上下文中是等价的(函数名会自动转换为函数指针),但显式使用&操作符可以提高代码的可读性。
1.2 函数指针的典型应用场景
函数指针在实际开发中有多种用途:
- 回调机制:在事件驱动编程中,函数指针常用于实现回调。例如:
cpp复制void processData(int* data, int size, void (*callback)(int)) {
for (int i = 0; i < size; ++i) {
callback(data[i]);
}
}
- 策略模式:通过函数指针可以在运行时改变算法行为:
cpp复制void bubbleSort(int* arr, int size, bool (*compare)(int, int)) {
// 使用compare函数决定排序顺序
}
- 插件系统:动态加载的库通常通过函数指针暴露其接口。
1.3 函数指针与指针函数的区别
初学者常常混淆这两个概念:
- 函数指针:指向函数的指针,如
int (*func)(int) - 指针函数:返回指针的函数,如
int* func(int)
理解这个区别对于正确解析复杂声明至关重要。可以使用"从内到外,从右到左"的规则来解析复杂声明:
cpp复制int (*(*func[5])(int))(double)
这个声明表示:func是一个包含5个元素的数组,每个元素是一个指针,指向一个接受int参数并返回一个指针的函数,该返回的指针指向一个接受double参数并返回int的函数。
2. Lambda表达式:现代C++的匿名函数利器
Lambda表达式是C++11引入的一项重要特性,它提供了一种简洁的方式来定义匿名函数,极大地提高了代码的表达能力。
2.1 Lambda表达式的基本语法
一个完整的Lambda表达式通常包括以下部分:
cp复制
