带取消引用和不带取消引用的函数有什么区别

What's the difference between function with dereference and without dereference

f1, (*f1), f2, (*f2) 有什么区别? (function) 和 (&function) 有什么区别?

#include <iostream>
using namespace std;

void function (char *s) {
    cout << s << endl;
}

int main () {
    void (*f1) (char*) = &function;
    void (*f2) (char*) = function;

    f1 ("f1 function without dereference.");
    (*f1) ("f1 function with dereference.");
    f2 ("f2 function without dereference.");
    (*f2) ("f2 function with dereference.");
    return 0;
}

What's the difference between f1, (*f1), f2, (*f2) ?

f1f2 是函数指针。 (*f1)(*f2) 是对函数的引用。函数指针和函数引用有什么区别?非常少,因为它们都可以使用完全相同的语法调用。但是,请参阅 this question 以获得对函数引用的更深入的解释。

and what's the difference between (function) and (&function) ?

function 是一个函数。 &function 是指向函数的指针。这里有一个极其微小的区别,即您可以将函数引用绑定到函数,但不能绑定到函数指针。

void (&fref1)(char*) = function; // compiles
void (&fref2)(char*) = &function; // does not compile

同样,请查看链接的问题,了解您可能使用函数引用的可能原因(数量不多)。