下面的代码标准正确吗?(神螺栓)
即 by-ref 捕获表示临时的转发引用,并在同一表达式中从函数返回结果 lambda 值。
当然,存储 lambda 供以后使用会使它包含一个悬空引用,但我指的是内部的确切用法main
。
我对这个 SO 答案和潜在的这种语言缺陷的怀疑。具体来说,有一条令人生畏的评论说“标准中的引用捕获生命周期规则引用捕获的变量,而不是数据及其范围” ——这似乎是说捕获的对临时的引用在我的代码中可能是无效的。
#include <stdlib.h>
#include <string.h>
#include <cassert>
template<typename F>
auto invoke(F&& f)
{
return f();
}
template<typename F>
auto wrap(F&& f)
{
return [&f]() {return f();}; // <- this by-ref capture here
}
int main()
{
int t = invoke(wrap(
[]() {return 17;}
));
assert(t == 17);
return t;
}