gpt4 book ai didi

c++ - void 指针可以指向 lambda 函数吗?

转载 作者:可可西里 更新时间:2023-11-01 18:17:05 26 4
gpt4 key购买 nike

将函数指针分配给 void 指针,

double f_dummy(double x) { return x; }
...
void *pv = f_dummy; //compilation error

如本 FAQ 中所解释的那样是非法的.然而,答案以声明结束:

如果以上内容似乎适用于您特定操作系统上的特定编译器的特定版本,请不要给我发电子邮件。我不在乎。这是非法的,期间。

编辑:作为对其他人的警告,我确实通过涉及类模板的继承案例遇到了这种“似乎有效”行为。没有编译器警告,没有意外的运行时行为。

这让我的 OCD 骨头发痒,让我想知道我是否一直在做的事情,例如,

...
auto l_func = [](double x){ return f_dummy(x); };
void *pv = &l_func;
auto pl = static_cast<decltype(&l_func)>(pv);
cout << (*pl)(5.) << endl;

编译和运行干净 (g++ -std=c++11 -Wall),是真正合法的。是吗?

最佳答案

是的,这是合法的,因为:

  • 指向对象的指针可以转换为 void* 并再次返回;
  • l_func 是一个对象(一个仿函数,具有未指定的类类型)——这就是 lambda 的实现方式,按照标准要求。

您引用的常见问题解答文本无关,因为它指的是指向函数 的指针。 _yourUnspecifiedLambdaType::operator() 是等效的*函数,但您不会在此处对其执行任何操作。

* 好吧,它甚至不等价,因为它是一个成员函数!

关于c++ - void 指针可以指向 lambda 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34268620/

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