Lambda表達(dá)式是C++11中的一個新特性,它使得我們可以創(chuàng)建一個匿名函數(shù)對象, 這個對象可以作為參數(shù)傳遞給其他函數(shù)或者對象,也可以直接被調(diào)用。 Lambda表達(dá)式通常用來簡化代碼,特別是在使用STL算法時非常有用。 在Qt中,Lambda表達(dá)式也經(jīng)常被用來處理信號與槽,它可以替代傳統(tǒng)的信號槽連接方式, 使得代碼更加簡潔易懂。 下面是一些Lambda表達(dá)式的用法說明及舉例代碼: 1. 基本語法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)按鈕被點擊時,會彈出一個消息框。 |
|
來自: 新潮技術(shù)研究社 > 《Qt》