c 可呼叫物件之lambda

2021-10-09 05:48:30 字數 1218 閱讀 9559

[capture list]

(parameter list)

->

return type

其中:capture list為捕獲列表,parameter list為引數列表,reuturn type為返回型別,function body為函式體。

auto f=

;auto f=[=

,&os]

(const vstring& s)

->

bool

;/*隱式捕獲為賦值捕獲(=),因為io物件無法拷貝,

所以如果要在該例lambda表示式function body中使用io物件必須顯示傳引用捕獲

且捕獲列表中不能再有值捕獲*/

auto f=

[v1]()

mutable

編譯器會將lambda表示式翻譯成乙個未命名類的未命名物件,在lambda表示式產生的類中含有乙個過載的函式呼叫運算子,例如:

auto f=

(const string& a,

const string& b)

;//該表示式會被翻譯成

class

unknow

//該類與未命名的類功能相同

}

lambda表示式的捕獲列表實際會被翻譯器翻譯為類的成員物件。預設情況下,過載的呼叫運算子是const的,因此lambda不能改變它的捕獲變數。但是如果lambda被宣告為可變的,則呼叫運算子就不是const了(見上述例子中mutable的使用)

size_sz;

auto f=

[sz]

(const string& a)

;//該lambda表示式會被翻譯為

class

unknow

//該形參對應的捕獲變數

//預設是const的

bool

operator()

(const string& a)

const

;private

://捕獲列表中的sz被翻譯為類的成員物件

size_t sz;

}

lambda表示式產生的類不含預設建構函式,賦值運算子過載以及預設析構函式。是否含有預設的拷貝/移動建構函式則通常要視捕獲的資料成員而定。

C 可呼叫物件

可呼叫物件 使用呼叫運算子來呼叫乙個可呼叫物件。呼叫運算子 為一對括號 裡面放置實參列表 可能為空 即匿名函式,不命名的可呼叫物件。每個lambda有它唯一的 未命名的,可以用auto宣告型別 類型別。完整結構 capture list parameter list return type 其中 r...

c 可呼叫物件 解惑

如有錯誤,還望指正。在閱讀書籍或者論壇的時候常常會遇到可呼叫物件的概念,很多人都沒有深入的理解這個概念,甚至有人會覺得函式就是可呼叫物件就是 函式,其實是不對的,在這裡給大家做一下詳細的解釋。可呼叫物件是c 長久以來存在的乙個概念,大體可以分為4種,分別是 1.函式指標 2.仿函式 3.可以被隱式轉...

C 可呼叫物件 function bind

void func int a intmain int argc,const char ar 仿函式定義 行為類似於函式的東西,c 中通過在類中過載 運算子實現。又稱函式物件 能行駛函式功能的類。class test intmain int argc,const char ar class test...