C++ 函数指针与Lambda匿名函数

OrzMiku / 2023-08-20 / 原文

函数指针

c语言学过了,这里简单记一下,下面举例一个用法就行:

#include<iostream>
#include<vector>

template <class T>
void print(T v) {
	std::cout << v << std::endl;
}

template <class T1, class Func>
void ForEach(std::vector<T1> &v, Func func) {
	for (T1 &value : v) {
		func(value);
	}
}

int main() {
	std::vector<int> v = { 1,1,4,5,1,4 };
	ForEach(v,print<int>);
	ForEach(v, [](int& a) { a++; });
	ForEach(v, print<int>);
	return 0;
}

比如这个代码,foreach便利出数据,具体执行什么操作,就可以通过函数指针传入。

Lambda匿名函数

匿名函数结构

[](){}
[]: 捕获
():参数表
{}:里面写函数内容

捕获

捕获可以让函数使用外部的值。

  • [] 什么都不捕获
  • [&] 引用捕获,可以修改值
  • [=] 按值捕获,不可以修改值

例子

	int c = 1;
	auto y = [=](int a, int b) {
		return a + b + c;
	};
	std::cout << y(1,2) << std::endl;

因为不需要修改c的值,所以按值捕获。结果是4.