小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

C++Qt中的lamda表達(dá)式使用說明及舉例

 新潮技術(shù)研究社 2023-05-17 發(fā)布于北京

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)按鈕被點擊時,會彈出一個消息框。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多