3 回答
TA貢獻1804條經驗 獲得超2個贊
lambda表達式的類型未指定。
但它們通常僅僅是仿函數的語法糖。lambda直接轉換為仿函數。里面的任何東西[]都變成了構造函數參數和仿函數對象的成員,里面的參數()變成了仿函數的參數operator()。
一個沒有變量的lambda(在[]s 里面沒有任何東西)可以轉換成一個函數指針(MSVC2010不支持這個,如果那是你的編譯器,但這個轉換是標準的一部分)。
但是lambda的實際類型不是函數指針。這是一些未指定的仿函數類型。
TA貢獻1811條經驗 獲得超6個贊
它是一個唯一的未命名結構,它使函數調用運算符重載。lambda的每個實例都引入了一種新類型。
在非捕獲lambda的特殊情況下,該結構還具有對函數指針的隱式轉換。
TA貢獻1777條經驗 獲得超3個贊
[C++11: 5.1.2/3]:的類型的λ-表達(這也是封閉的對象的類型)是一個獨特的,無名不愈合類類型 -稱為閉合類型 -其特性如下所述。此類類型不是聚合(8.5.1)。閉包類型在包含相應lambda表達式的最小塊作用域,類作用域或命名空間作用域中聲明。[..]
該子句繼續列出此類型的不同屬性。以下是一些亮點:
[C++11: 5.1.2/5]:lambda表達式的閉包類型有一個公共inline函數調用操作符(13.5.4),其參數和返回類型分別由lambda-expression的parameter-declaration-clause和trailing-return-type描述。[..]
[C++11: 5.1.2/6]:沒有lambda-capture的lambda表達式的閉包類型有一個公共的非虛擬非顯式const轉換函數,用于指向具有與閉包類型的函數調用操作符相同的參數和返回類型的函數。此轉換函數返回的值應為函數的地址,該函數在調用時與調用閉包類型的函數調用運算符具有相同的效果。
最后一段話的結果是,如果您使用轉換,您將可以分配LAMBDA給pFptr。
- 3 回答
- 0 關注
- 861 瀏覽
添加回答
舉報
