Lambda表達(dá)式是C++11中的一個新特性,它使得我們可以創(chuàng)建一個匿名函數(shù)對象,
這個對象可以作為參數(shù)傳遞給其他函數(shù)或者對象,也可以直接被調(diào)用。
Lambda表達(dá)式通常用來簡化代碼,特別是在使用STL算法時非常有用。
在Qt中,Lambda表達(dá)式也經(jīng)常被用來處理信號與槽,它可以替代傳統(tǒng)的信號槽連接方式,
使得代碼更加簡潔易懂。
下面是一些Lambda表達(dá)式的用法說明及舉例代碼:
```
[capture](parameters) -> return-type { body }
```
其中,`capture`是一個可選的捕獲列表,用于捕獲外部變量;
`parameters`是一個可選的參數(shù)列表;
`return-type`是返回值類型,也是一個可選項;`body`是Lambda表達(dá)式的函數(shù)體。
下面是一個簡單的Lambda表達(dá)式示例:
```
auto lambda = []() { cout << "Hello, world!" << endl; };
lambda();
```
這個Lambda表達(dá)式?jīng)]有捕獲任何外部變量,也沒有參數(shù),返回值為void,
函數(shù)體只是簡單地輸出一行文本。
2. 捕獲外部變量
Lambda表達(dá)式可以捕獲外部變量,以便在函數(shù)體中使用。捕獲方式有兩種:
值捕獲和引用捕獲。值捕獲會復(fù)制一份外部變量的值,而引用捕獲則會引用外部變量。
```
int x = 10;
auto lambda1 = [x]() { cout << "x = " << x << endl; };
auto lambda2 = [&x]() { cout << "x = " << x << endl; };
x = 20;
lambda1(); // 輸出 x = 10
lambda2(); // 輸出 x = 20
```
在上面的例子中,`lambda1`捕獲了變量`x`的值,因此在調(diào)用`lambda1`時,
輸出的是捕獲時的值10;`lambda2`捕獲了變量`x`的引用,
因此在調(diào)用`lambda2`時輸出的是當(dāng)前的值20。
3. 參數(shù)列表
Lambda表達(dá)式可以帶有參數(shù)列表,參數(shù)列表的語法與普通函數(shù)相同。
```
auto lambda = [](int x, int y) { return x + y; };
cout << lambda(1, 2) << endl; // 輸出 3
```
在上面的例子中,`lambda`帶有兩個參數(shù)`x`和`y`,返回它們的和。
4. 返回值類型
Lambda表達(dá)式可以指定返回值類型,也可以自動推斷返回值類型。
```
auto lambda1 = [](int x, int y) -> int { return x + y; };
auto lambda2 = [](int x, int y) { return x + y; };
cout << lambda1(1, 2) << endl; // 輸出 3
cout << lambda2(1, 2) << endl; // 輸出 3
```
在上面的例子中,`lambda1`顯式指定了返回值類型為int,
而`lambda2`則使用了自動類型推斷。
5. Lambda表達(dá)式作為函數(shù)參數(shù)
Lambda表達(dá)式可以作為函數(shù)參數(shù)傳遞。
```
std::vector<int> v = {1, 2, 3, 4, 5};
std::for_each(v.begin(), v.end(), [](int x) { cout << x << endl; });
```
在上面的例子中,`std::for_each`函數(shù)接受一個函數(shù)對象作為第三個參數(shù),
我們使用一個Lambda表達(dá)式來輸出v中的每個元素。
6. Lambda表達(dá)式作為信號槽
Lambda表達(dá)式可以替代傳統(tǒng)的信號槽連接方式,使得代碼更加簡潔易懂。
```
connect(button, &QPushButton::clicked, [=]() {
QMessageBox::information(this, "Title", "Message");
});
```
在上面的例子中,我們使用Lambda表達(dá)式連接了QPushButton的clicked信號
和QMessageBox的information槽。
當(dāng)按鈕被點擊時,會彈出一個消息框。
聯(lián)系客服