在C ++中我们做这样的事情:
void a_function(void (*function_name)(char *data))
{
char *data = new char[1];
function_name(data);
}
a_function([](char *data) {
//do sth
});
我猜function_name是一个指向函数的指针。但是当我传递一个匿名函数时,是否在传递之前为此函数分配了一个空间?
如果我没有传递匿名函数但确实传递了现有函数的地址,那么它与上面的代码片段是否相同呢?
答案 0 :(得分:2)
实际上,只要编译器无法证明没有人调用它,无状态lambda就有一个存在的函数。此函数在编译时存储在可执行文件中,并在运行时加载。除非是dll左右的格式(或其他类似的东西),否则只要程序有效,它就会存在。
理论上,有一些有效的函数指针在调用时会运行一个函数。从无状态lambda获得的指针是一个有效的函数指针,当它被创建的lambda被销毁时它不会变为无效。