c++ - 为什么 (*callback)() 有效,而 *callback() 或 *callback 在 C++ 中不起作用

标签 c++ callback operator-precedence

我是一名 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/

相关文章:

C++ - 使用 decltype 或 auto 创建临时对象

c++ - 用于时区规则的 Linux/跨平台 API? (替换锁定 localtime_r)

c# - 从非托管 C++ 调用 C# 函数(通过托管包装器)

javascript - Promise.catch 正在吞噬错误

ios - 使用回调重现 UIAlertViewController

c++ - 这段代码定义明确吗?

javascript - JavaScript 的三元运算符的运算符优先级

c++ - 套接字 API :Socket operation on non-socket

c++ - vector 迭代自身

operator-precedence - 控制验证注释顺序?