我看了很酷的片段:
http://channel9.msdn.com/Shows/Going+Deep/C-and-Beyond-2011-C11-Panel-Scott-Meyers-Andrei-Alexandrescu-and-Herb-Sutter
在那里,安德烈(54:00)谈到了逃避兰姆达斯,这些兰姆达引用了当地人。总的来说,我想我已经明白了问题,但我不确定我是否真的得到了它,所以我想通过实例。那有什么简单的例子吗?
答案 0 :(得分:4)
这是一个简单的例子:
std::function<int()> f() {
int local;
return [&]() { return local; }
}
通过引用捕获local
变量,然后返回lambda。稍后调用返回的函数将使用引用,该引用现在无效,因此调用未定义的行为。这似乎是编译器发出警告的简单案例。我希望将来我们会看到它。
这是一个更复杂的例子:
std::function<int()> f() {
int local;
return g(local);
}
std::function<int()> g(int const& param) {
return [&]() { return param; }
}
函数g
可以在另一个翻译单元中定义,这会损害编译器发出警告的能力。