取消引用函数指针的值是什么意思

#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))。


以上是取消引用函数指针的值是什么意思的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>