📅  最后修改于: 2023-12-03 14:39:57.163000             🧑  作者: Mango
Lambda表达式是C++11中新增的特性,是一种匿名函数(函数对象),可以简化某些函数的定义和调用。Lambda表达式可以看做一个临时创建的函数,没有函数名,但可以像函数一样使用。
Lambda表达式的语法如下所示:
[capture list] (parameters) -> return-type {
//function body
}
capture list
:是一个允许我们从外部作用域捕获变量的列表。可以显式地将一个外部变量复制到Lambda表达式中。parameters
:Lambda表达式的参数列表。return-type
:Lambda表达式的返回值类型,可以省略,编译器会进行推断。function body
:Lambda表达式的函数体。举个例子:
auto sum = [] (int a, int b) -> int {
return a + b;
};
sum(1, 2); //输出3
这里我们使用Lambda表达式定义了一个求和运算,输入两个整数,返回它们的和。
Lambda表达式的应用非常广泛,例如:
在STL算法中,我们可以使用Lambda表达式来定义一些谓词,例如筛选某些元素,对某些元素进行操作等。
vector<int> v = {1, 2, 3, 4, 5};
int sum = accumulate(v.begin(), v.end(), 0, [] (int a, int b) {
return a + b;
});
//sum的值为1+2+3+4+5=15
这里我们使用了Lambda表达式来计算整个容器的和。
在多线程编程中,Lambda表达式可以用来替代传统的函数指针,更加方便和灵活。
thread t([] {
for (int i = 0; i < 10; i++) {
cout << i << endl;
}
});
t.join();
这里我们使用了Lambda表达式来创建一个新的线程,输出数字0到9。
在GUI编程中,Lambda表达式可以用来响应用户的操作,例如按下按钮,鼠标移动等。
QPushButton *button = new QPushButton("Click me");
QObject::connect(button, &QPushButton::clicked, [] {
QMessageBox::information(nullptr, "Message", "Hello, world!");
});
这里我们使用了Lambda表达式来定义单击按钮后弹出对话框的操作。
Lambda表达式是C++11中新增的特性,可以用来定义匿名函数,简化某些函数的定义和调用。Lambda表达式的语法比较简单,包含一个捕获列表、一个参数列表、一个返回值类型和一个函数体。Lambda表达式的应用非常广泛,主要包括STL算法、多线程编程和GUI编程等方面。