c 將lambda表示式作為引數傳遞

2021-08-21 17:33:48 字數 1564 閱讀 5196

#include

int a = 1;

typeid(a).name();

c++11 提供了對匿名函式的支援,稱為 lambda 函式(也叫 lambda 表示式)。lambda 表示式把函式看作物件。lambda 表示式可以像物件一樣使用,比如可以將它們賦給變數和作為引數傳遞,還可以像函式一樣對其求值。lambda 表示式本質上與函式宣告非常類似。

[capture](parameters)->return-type

//例如

(int x, int y) -> int

int main();

//error! 空捕獲列表,無法使用作用域內其他變數

auto lambda = (int a, int b);

//success

auto lambda = [=];

//success, 值傳遞

auto lambda = [=];

//error! 值傳遞無法修改變數值

auto lambda = [&];

//success, 引用傳遞

auto lambda = [&a, b];

//error, 變數a引用傳遞,變數b值傳遞,故b不可修改

}

想要使lambda作為引數,首先要明白他的型別,但是auto無法作為函式引數型別,使用1中獲取型別方法輸出為【z4maineulve_23】,根本不是型別,查閱資料,只能使用template模板來實現。

template

struct isfunctor : std::false_type ;

template

struct isfunctor: std::true_type ;

template

struct islambda : isfunctor;

template

std::enable_if::value> check(l lambda)

int main() ;

check(fun);

return 0;

}

//輸出為: 2.3

// 2.3

// lambda(1, 2) = 88

lambda表示式作為方法引數

一 作為方法引數傳遞lambda表示式或lambda塊 1 是一種常見用途,將lambda表示式或者lambda塊作為引數傳遞給方法。2 前提 方法的引數是乙個函式式介面引用。3 將lambda表示式作為引數傳遞給方法,是很方便的技巧,尤其是該lambda表示式只用一次。4 將lambda塊作為引數...

lambda表示式 lambda表示式

1.概述 c 11 中的 lambda 表示式用於定義並建立匿名的函式物件,以簡化程式設計工作。lambda 的語法形式如下 函式物件引數 操作符過載函式引數 mutable 或 exception 宣告 返回值型別可以看到,lambda 主要分為五個部分 函式物件引數 操作符過載函式引數 muta...

Lambda表示式和Lambda表示式樹

原版來自 linq學習筆記之二 lambda表示式和lambda表示式樹 lambda 表示式 lambda expressions 是linq實現的另一特性。lambda表示式的作用就是使用使用函式式語法,將方法實現關聯到委託例項。在使用查詢表示式 query expressions 時,查詢表示...