非捕获 lambda 能活多久?
How long does a non capturing lambda live?
如果我有一些大致如下所示的 C++ 代码:
void (*fun_ptr)(int);
void Test()
{
fun_ptr = [](int i) { /* do stuff */ };
}
int main()
{
Test();
/* do stuff */
fun_ptr(0);
return 0;
}
我能期望那个函数指针永远存在吗?或者它是否像结构一样,它只在 lambda 声明在范围内时才有效?
What is the lifetime of the target of pointer-to-function pointing to a lambda? 中的答案没有完全解决这个问题,链接的答案没有解释为什么作用域 lambda 可以比创建它们的代码的作用域更长。
fun_ptr
没有指向 lambda。
它有效地指向一个 static
函数(在 lambda class 中定义),并且这个函数不需要一个活的 lambda 来工作。
如果我有一些大致如下所示的 C++ 代码:
void (*fun_ptr)(int);
void Test()
{
fun_ptr = [](int i) { /* do stuff */ };
}
int main()
{
Test();
/* do stuff */
fun_ptr(0);
return 0;
}
我能期望那个函数指针永远存在吗?或者它是否像结构一样,它只在 lambda 声明在范围内时才有效?
What is the lifetime of the target of pointer-to-function pointing to a lambda? 中的答案没有完全解决这个问题,链接的答案没有解释为什么作用域 lambda 可以比创建它们的代码的作用域更长。
fun_ptr
没有指向 lambda。
它有效地指向一个 static
函数(在 lambda class 中定义),并且这个函数不需要一个活的 lambda 来工作。