gpt4 book ai didi

c++ - 为什么我不能将 lambda 转换为 void* 然后转换为函数指针?

转载 作者:太空宇宙 更新时间:2023-11-03 10:25:35 30 4
gpt4 key购买 nike

我有一个特殊情况,由于类型删除,我需要将 lambda 转换为 void* 以便存储它。

对于第一种情况,一切都按预期进行,但对于第二种情况,我想知道如何解决它,以及是否定义了这种行为。

int main()
{
auto lambda = [](int x){
std::cerr << x << std::endl;
};

//Cast lambda to void*
void* vptr = static_cast<void*>(&lambda);

//Cast vptr back to lambda and call it
(*static_cast<decltype(&lambda)>(vptr))(10); //<--- Ok, compiles and works

//Cast vptr to function pointer
(*static_cast<void(**)(int)>(vptr))(10); //<--- Compiles but segmentation fault

return 0;
}

最佳答案

lambda 不是函数 — 它是具有 operator() 成员的隐藏类类型的实例。因此,将 lambda 的地址强制转换为函数指针是行不通的。

要么使用您的第一种方法(有效),要么最好改变周围的情况,以便完全消除此要求。因为它太疯狂了。

关于c++ - 为什么我不能将 lambda 转换为 void* 然后转换为函数指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36818588/

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