簡體   English   中英

從c ++ 11中的函數返回帶有捕獲的lambda

[英]Return lambda with capture from a function in c++11

標准 5.1.2 6說有一個從沒有捕獲的 lambda 表達式到相應函數指針類型的轉換函數。 帶有捕獲的 lambdas 呢? 以下代碼編譯時沒有警告。 這會導致未定義的行為嗎?

std::function<void()> makeFucntion(int& parameter)
{
    return [&parameter]() // 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM