gpt4 book ai didi

c++ - 匿名函数是在内存中持久存在,还是按值传递

转载 作者:行者123 更新时间:2023-11-28 02:25:11 25 4
gpt4 key购买 nike

在 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 是一个指向函数的指针。但是当我传递一个匿名函数时,在传递之前是否为这个函数分配了内存空间?

如果我没有传递匿名函数但传递了现有函数的地址,它是否与上面的代码片段相同?

最佳答案

在实践中,无状态 lambda 有一个函数,只要编译器不能证明没有人调用它就存在。此函数在编译时存储在您的可执行文件中,并在运行时加载。除非是 dll 或 so 格式(或其他类似的东西),它的生命周期与程序一样长。

理论上,有一些有效的函数指针可以在调用时运行一个函数。您从无状态 lambda 获得的指针是一个有效的函数指针,当创建它的 lambda 被销毁时它不会变得无效。

关于c++ - 匿名函数是在内存中持久存在,还是按值传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30969190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com