【发布时间】:2019-06-18 20:31:21
【问题描述】:
我有一个函数,它接受一个函数指针作为参数。令人惊讶的是,我既可以传入函数指针,也可以传入普通函数:
#include <iostream>
#include <functional>
int triple(int a) {
return 3*a;
}
int apply(int (*f)(int), int n) {
return f(n);
}
int main() {
std::cout << apply(triple, 7) << "\n";
std::cout << apply(&triple, 7) << "\n";
}
我很困惑为什么会这样。是否存在从函数到函数指针的隐式转换?
【问题讨论】:
-
而且,由于地址和取消引用规则对函数起作用的方式,您还可以使用
&&f、&&&f等,与任意数量的 & 一起使用。同样,在apply中,您可以写成(*f)(n)、(**f)(n)等。
标签: c++ function function-pointers