何时在C++中使用函数引用而不是函数指针?

son*_*yao 11 c++ function-pointers

何时使用功能参考如

void (&fr)() = foo;
fr();
Run Code Online (Sandbox Code Playgroud)

而不是诸如的函数指针

void (*fp)() = &foo;
fp();
Run Code Online (Sandbox Code Playgroud)

有什么功能指针不能做但函数引用可以吗?

Vai*_*ain 2

当您定义引用时:

void (&fr)() = foo;
fr();
Run Code Online (Sandbox Code Playgroud)

它使您能够fr在几乎所有可以使用的地方使用foo,这就是原因:

fr();
(*fr)();
Run Code Online (Sandbox Code Playgroud)

工作方式与直接使用完全相同foo

foo();
(*foo)();
Run Code Online (Sandbox Code Playgroud)

另一个区别是,取消引用函数引用不会导致错误,而函数指针不需要取消引用。