c++ 用指针将函数作为参数传参

今天发现了一种写法,顺便记录一下。废话不多说,先看代码:

#include <iostream>

using namespace std;

int addition(int x, int y){
    return x + y;
}

int subtraction(int x, int y){
    return x - y;
}

int operation(int x, int y, int (*function)(int, int)){
    return (*function)(x, y);
}

int main(){
    int answer = operation(1, 2, addition);
    cout << answer;

}
在这里我们可以将(*function)视为函数的指针,直接将函数名称传进去,但是内部获取的是指针,而不是函数本身,所以不用担心这么做是把函数拷贝一份浪费了内存的空间。

网上有一些用typedof方法的实现,其实也可以,但是这种方法相对更加简洁一些。对了,上面的

int answer = operation(1, 2, addition);

addition也可以加上&,但其实都一样。编译器会自己读取地址。

对了,我上次发的那个在线编译器只支持c++98,如果想要在线测试比较新的c++功能,比如c++11或者c++14,那么可以访问http://cpp.sh/ (国内的网站可能打开会慢一些)上次国内的那个网站连一个输入函数都实现不了,这个是可以输入的,所以功能上要比上次那个好很多,哈哈。

猜你喜欢

转载自blog.csdn.net/sinolzeng/article/details/72954023