我是一名 C++ 初学者,我认为要真正学习指针和引用,我应该尝试创建一个回调函数,这是我在 JavaScript 中认为理所当然的事情。
但是,对于我的一生,我不知道为什么这些括号在 (*callback)()
中如此重要,如果有人可以向我解释它,我会很高兴。
这是我编写的一些代码,它以某种方式工作:
#include<cstdio>
void function_two()
{
printf("then this runs!");
}
void function_one(void (*callback)() = nullptr)
{
printf("this runs first");
if(callback != nullptr)
{
(*callback)();
}
}
int main()
{
function_one(&function_two);
}
最佳答案
事实上你可以直接写
callback();
如果您使用一元解引用运算符 *,那么它相对于后缀函数调用运算符具有较低的优先级。所以你必须写
(*callback)();
否则这样的调用
*callback();
编译器认为取消引用函数调用的结果。
请记住,您甚至可以编写如下内容
(******callback)();
因为结果函数指示符被转换回函数指针。
关于c++ - 为什么 (*callback)() 有效,而 *callback() 或 *callback 在 C++ 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60495721/