【发布时间】:2018-12-18 20:01:43
【问题描述】:
以下代码是否合法:
std::function<void()> CreateFunction(int i, std::function<void()> previous_f) {
return [i,previous_f] {
std::cout << i << std::endl;
previous_f();
};
}
int main()
{
std::function<void()> f = []{};
for(int i=0;i<3;++i) {
f = CreateFunction(i, f);
}
f();
}
它按预期编译和运行 - http://cpp.sh/2smb3,但我担心在 f 移动后分配给 f 可能会引发未定义的行为。
【问题讨论】:
-
实际上,您并没有在代码中使用移动的对象。该链接仍然是一个很好的阅读,但它不适用于这里。