文章目录
1. 常见 lambda 面试题🖊
- 🍎① 如果⼀个
lambda
表达式作为参数传递给⼀个函数,那这个函数可以使⽤这个lambda
表达式捕获的变量吗 ?
🐧 函数本身无法直接访问到
lambda
表达式捕获的变量,获的变量仅对lambda
表达式及其生成的闭包对象内部可见。
// 通过模板传递lambda表达式
// executeLambda 是一个模板函数,可以接受任何可调用对象。
#include <iostream>
void executeLambda(const std::function<void()>& func) {
// 这里无法直接访问捕获的变量
func();
}
int main() {
int x = 10;
auto lambda = [x]() { std::cout << "Captured value: " << x << std::endl; };
executeLambda(lambda);
// 这里也无法直接访问捕获的变量
return 0;
}
- 🍎②
lambda
表达式、std::function
、函数指针这三者有什么区别?
都是 用来表示和处理函数对象或可调用对象的不同方式。它们各自有不同的特点和使用场景。
下面是它们之间的区别: