取消引用函数指针的值是什么意思
#include <iostream>
void PrintTheValue(int(*func)(int a));
int main(int argc, char **argv) {
PrintTheValue([](int a) {return a; });
return 0;
}
void PrintTheValue(int(*func)(int a)) {
std::cout << *func << std::endl;
}
在我理解 的概念中func,它将是一个指向按值传递的 int 的指针。但在这种情况下,我传递了一个似乎没有在任何地方被调用的 lambda。(所以根本没有任何价值?)
当我运行它时,它不会破坏程序,而是打印00EE6F80.
这个地址是什么意思?我不知道如何解释它。
回答
在我理解 的概念中
func,它将是一个指向按值传递的 int 的指针。
func是一个指向函数的指针,它接受 anint并返回int。
但在这种情况下,我传递了一个似乎没有在任何地方被调用的 lambda。
您正在传递一个没有捕获的 lambda,它可以隐式转换为指向函数的指针。在PrintTheValue, 中*func,即对指针的取消引用导致对函数的引用,并且为了传递给operator<<ofstd::cout,它再次转换为函数指针,然后转换为bool带值true(作为非空指针),然后您应该得到结果1(或true使用std::boolalpha)。如果你想打电话,func你可以func(42)(或(*func)(42))。