区分声明和定义
#include <iostream>
using namespace std;
int main() {
void func(); // prototype 声明函数原型,注意声明可以放在局部域
class A; // 声明,这里只是为了说明声明式可以放在局部域
void (*pf)(); // 定义一个函数指针,本质上是一个指针
pf = func; // 为函数指针赋值
pf(); // 调用函数指针方法一
(*pf)(); // 调用函数指针方法二
}
// 定义函数,和上面的 prototype 一致
void func() {
cout << "func()" << endl;
}
函数类型 VS 函数指针类型
#include <iostream>
#include <memory>
using namespace std;
class A {
public:
A() { cout << "A()" << endl; }
~A() { cout << "~A()" << endl; }
};
void del(A* pA) { delete pA; }
int main() {
// 注意:decltype 返回一个函数类型,我们必须加上 * 表示这是一个函数指针类型
// 也就是说,函数类型 与 函数指针类型 是不同的
// @ref 《C++ Primer 中文版(第五版)》P419
unique_ptr<A, decltype(del)*> p1(new A(), del);
return 0;
}