我正在学习C++教程.我无法理解关于函数指针的这个例子.这里是:-
// pointer to functions
#include <iostream>
using namespace std;
int addition (int a, int b)
{ return (a+b); }
int subtraction (int a, int b)
{ return (a-b); }
int operation (int x, int y, int (*functocall)(int,int))
{
int g;
g = (*functocall)(x,y);
return (g);
}
int main ()
{
int m,n;
int (*minus)(int,int) = subtraction;
m = operation (7, 5, addition);
n = operation (20, m, minus);
cout <<n;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
行" m = operation (7, 5, addition);"和" n = operation (20, m, minus);"以相同的方式处理,但是当减号被声明为指向函数的指针时,加法却没有.那么,他们是如何以同样的方式工作的呢?
在函数调用中或在C/C++中赋值运算符的右侧使用函数名作为参数参数,会导致转换为指向原始函数的函数指针.
所以,例如,如果你有一个像这样的功能
void my_function(int a, int b);
Run Code Online (Sandbox Code Playgroud)
如果您使用my_function赋值运算符右侧的标识符,如下所示:
void (*my_function_ptr)(int, int) = my_function;
Run Code Online (Sandbox Code Playgroud)
然后my_function隐式地从函数对象转换为类型的函数指针void (*)(int, int),初始化my_function_ptr它指向的标识符my_function.传递my_function给另一个函数时也会出现同样的情况:
void another_function(int, void (*)(int, int));
another_function(5, my_function);
Run Code Online (Sandbox Code Playgroud)
在调用中another_function(),标识符my_function再次转换为指向原始函数的指针.
最后,请记住,仅当您将标识符名称传递给函数参数或将其放在赋值运算符的右侧时才会出现这种情况.使用()符号和可选参数列表(即,my_function(5, 6))添加函数调用将评估函数,而不是导致转换为函数指针.