C++ C++;:如何将对函数的引用传递到另一个函数?

C++ C++;:如何将对函数的引用传递到另一个函数?,c++,function,pass-by-reference,argument-passing,C++,Function,Pass By Reference,Argument Passing,我一直在阅读有关函数指针以及将它们用作其他函数的参数的内容。我的问题是,如何在不使用指针的情况下通过引用传递函数?我一直试图在互联网上找到答案,但我没有找到一个好的答案。我知道可以通过如下引用传递变量:void funct(int&anInt)。您将如何做类似的事情,但不是引用变量,而是引用函数作为参数?另外,您将如何在函数体中使用对函数的引用?\include #include <iostream> using namespace std; void doCall( void (

我一直在阅读有关函数指针以及将它们用作其他函数的参数的内容。我的问题是,如何在不使用指针的情况下通过引用传递函数?我一直试图在互联网上找到答案,但我没有找到一个好的答案。我知道可以通过如下引用传递变量:
void funct(int&anInt)。您将如何做类似的事情,但不是引用变量,而是引用函数作为参数?另外,您将如何在函数体中使用对函数的引用?

\include
#include <iostream>
using namespace std;

void doCall( void (&f)(int) )
{
    f( 42 );
}

void foo( int x )
{
    cout << "The answer might be " << x << "." << endl;
}

int main()
{
    doCall( foo );
}
使用名称空间std; 作废文件(作废和失效)(内部)) { f(42); } void foo(int x) {
出于好奇,我为什么要使用对函数的引用而不是对函数的指针?@FredOverflow:因为指针可以是空的或无效的。引用保证它有效且不为空(没有空引用),否则程序中就有错误。@Alf P.Steinbach:“或者程序中有错误"这在理论上听起来不错,但如果您有类似于
sometype&ref=*ptr;
的内容,指针中的地址将被简单地复制到引用中的地址中,该地址可能无效或为空。当
ptr
无效或为空时,您可能会说上面的语句是未定义的行为,但不会有任何指示在编译或运行时,这一点仍然取决于程序员,以确保它是有效的和非空的,就像使用指针一样。因此,我说这对程序员来说没有任何区别。我认为这是一个很大的区别。如果在每个API中使用空值不是一个合理值的引用来构建整个代码库,那么de>sometype&ref=*ptr;
这种情况不会经常出现,因为到处都有引用。接受引用和API中的指针在语义上也有区别。接受引用清楚地表明不能使用null调用函数。如果它是引用,则调用方有责任,i如果是指针,则是被调用方的。注意:不能传递函数。只能传递函数的引用或指针。