![](/img/trans.png)
[英]Return type of lambda in C++11 from inside the lambda (flat map function)
[英]Return lambda with capture from a function in c++11
標准 5.1.2 6說有一個從沒有捕獲的 lambda 表達式到相應函數指針類型的轉換函數。 帶有捕獲的 lambdas 呢? 以下代碼編譯時沒有警告。 這會導致未定義的行為嗎?
std::function<void()> makeFucntion(int& parameter)
{
return [¶meter]() // convert the lambda to std::function
{
cout << parameter;
};
}
int var = 4;
auto foo = makeFucntion(var);
foo();
如果存在未定義的行為,是否有另一種方法可以返回 lambda 表達式並從 c++11 中的函數捕獲?
std::function<void()>
不是函數指針。 std::function<void()>
可以存儲的不僅僅是函數指針。
如果您嘗試返回函數指針void(*)()
那么代碼將無法編譯,因為帶有捕獲的 lambdas 沒有轉換為函數指針。
當您調用foo()
時,由於parameter
被引用並捕獲,並且var
仍在范圍內,因此代碼很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.