標準 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 中的函式捕獲?
uj5u.com熱心網友回復:
std::function<void()>不是函式指標。std::function<void()>可以存盤的不僅僅是函式指標。
如果您嘗試回傳函式指標void(*)(),那么代碼將無法編譯,因為帶有捕獲的 lambdas 沒有轉換為函式指標。
Asparameter由referene 傳遞和捕獲,并且在您呼叫代碼var時仍在范圍內。foo()
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/488661.html
