轉換為函式指標

如果 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;