轉換為函式指標
如果 lambda 的捕獲列表為空,則 lambda 會隱式轉換為函式指標,該函式指標採用相同的引數並返回相同的返回型別:
auto sorter = [](int lhs, int rhs) -> bool {return lhs < rhs;};
using func_ptr = bool(*)(int, int);
func_ptr sorter_func = sorter; // implicit conversion
也可以使用一元加運算子強制執行此類轉換:
func_ptr sorter_func2 = +sorter; // enforce implicit conversion
呼叫此函式指標的行為與在 lambda 上呼叫 operator()
完全相同。這個函式指標絕不依賴於源 lambda 閉包的存在。因此它可能比 lambda 閉合更長壽。
此功能主要用於將 lambda 用於處理函式指標的 API,而不是 C++函式物件。
Version >= C++ 14
對於具有空捕獲列表的通用 lambda,也可以轉換為函式指標。如有必要,將使用模板引數推導來選擇正確的特化。
auto sorter = [](auto lhs, auto rhs) { return lhs < rhs; };
using func_ptr = bool(*)(int, int);
func_ptr sorter_func = sorter; // deduces int, int
// note however that the following is ambiguous
// func_ptr sorter_func2 = +sorter;