Gle*_*aum 1 c++ lambda c++11 c++14
如果自动绑定到lambda函数,自动生命的生命是否延伸到lambda函数的生命周期?
最简单的情况:
auto genfunc (int start)
{
int count=start;
return [&count] {
return count++;
};
}
Run Code Online (Sandbox Code Playgroud)
这是好的还是未定义的行为?
自动生命延长到lambda函数的生命吗?
不.这里的lambda可能会令人困惑,所以让我们把它重写成一个结构:
struct X
{
int operator()() const { return ref++; }
int& ref;
};
auto genfunc (int start)
{
int count=start;
return X{count};
}
Run Code Online (Sandbox Code Playgroud)
X我们创建的对象将一个reference(ref)保存到一个临时(count),该对象在返回对象后立即超出范围.lambda没有什么特别之处 - 悬挂参考是一个悬垂的参考.
没有理由保留引用,只是捕获按值:
auto genfunc (int start)
{
return [start]() mutable {
return start++;
};
}
Run Code Online (Sandbox Code Playgroud)
请注意所需的mutable关键字.
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |