我想通過一個帶捕獲的lambda函數[&]。什麼是存儲捕獲lambda的變量的正確聲明? [下面F2]C++ 11 Lambda通過捕獲
// Non-capturing
void (*f1)() = [](){ }; // Works
// All by reference
void (*f2)() = [&](){ }; // Syntax Error
我想通過一個帶捕獲的lambda函數[&]。什麼是存儲捕獲lambda的變量的正確聲明? [下面F2]C++ 11 Lambda通過捕獲
// Non-capturing
void (*f1)() = [](){ }; // Works
// All by reference
void (*f2)() = [&](){ }; // Syntax Error
C++標準,部分§5.1.2/6:[expr.prim.lambda]
該閉合類型的非通用的λ-表達沒有lambda捕獲具有公共的非虛擬非顯式const轉換函數指向函數與C++語言鏈接(7.5)具有相同的參數和返回類型作爲閉包類型的函數調用操作符。通過這種轉換函數的返回值應是一個函數調用時,與調用閉合類型的函數調用操作
由於您的拉姆達的效果相同的地址有捕獲(默認之一:[&]
) ,沒有轉換操作符到指向函數的指針。
或者,您可以使用std::function<>
來包裝你的λ:
#include <functional>
#include <iostream>
int main()
{
int i = 42;
std::function<void(void)> f = [&](){ std::cout << i; };
f();
}
謝謝。這太羅嗦了,我自己無法理解。 – RandomClown 2014-08-28 10:34:45
汽車F = [&](){...}? – Kiroxas 2014-08-28 10:14:14
帶捕捉的Lambdas不能轉換爲函數指針。 – user657267 2014-08-28 10:15:13
請注意,您並未嘗試通過引用傳遞lambda函數。 – juanchopanza 2014-08-28 10:19:20