真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++ Lambda 表達(dá)式遞歸寫法

今天看到一篇博客介紹使用 Lambda 表達(dá)式遞歸計(jì)算 n!。使用了 C++14 的 generic lambda,給 Lambda 表達(dá)式加了一個(gè)模板參數(shù),在函數(shù)調(diào)用的時(shí)候?qū)?Lambda 表達(dá)式作為參數(shù)傳遞給下一層函數(shù)。這種方法每次調(diào)用函數(shù)的時(shí)候都要比常規(guī)的函數(shù)多傳一個(gè)參數(shù)。我想起兩年前也用 Lambda 表達(dá)式寫過遞歸,利用了引用捕獲和 std::function。以 n! 為例,代碼為:

創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元湟中做網(wǎng)站,已為上家服務(wù),為湟中各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108

#include 
#include 

int main()
{
    std::function f = [&f](int n) {
        if (n == 0 || n == 1) {
            return 1;
        }

        return n * f(n - 1);
    }

    std::cout << f(5) << std::endl;
}

這種寫法避免了使用 auto f = [&f](int n) 。如果使用 auto 會(huì)造成 f 的類型推導(dǎo)不出來,因?yàn)?f 的類型依賴于后面的 Lambda 表達(dá)式,而編譯器在編譯 Lambda 表達(dá)式時(shí)無法確定 f 的類型。借助 std::function 就可以避免推導(dǎo) f 的類型。這種寫法看似奇特,其實(shí)是合法的,原理與 C 語言的 void *p = &p; 類似。


網(wǎng)頁標(biāo)題:C++ Lambda 表達(dá)式遞歸寫法
URL鏈接:http://weahome.cn/article/dsoijeg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部