在C++中传递函数类型的参数是什么意思?

tem*_*def 8 c++ types arguments function

前一阵子我发现可以写一个C++函数,它接受函数类型的参数(不是函数指针类型!).例如,这是一个函数,它接受一个接受并返回double的回调函数:

void MyFunction(double function(double));
Run Code Online (Sandbox Code Playgroud)

我的问题是拥有函数类型的变量意味着什么,因为你不能在任何其他上下文中声明一个.从语义上讲,它与函数指针或函数的引用有何不同?我应该注意函数指针和函数类型变量之间是否存在重要区别?

Jam*_*lis 13

就像void f(int x[])是一样void f(int* x),以下两个是相同的:

void MyFunction(double function(double)); 
void MyFunction(double (*function)(double)); 
Run Code Online (Sandbox Code Playgroud)

或者,在官方语言(C++ 03 8.3.5/3)中,在确定函数的类型时,

在确定每个参数的类型之后,将"数组T"或"函数返回T" 类型的任何参数分别调整为"指向指针T"或"指向函数返回的指针T".

  • 在极少数情况下,ISO标准清晰易懂. (3认同)