C++:如何将引用函数传递给另一个函数?

Hud*_*den 10 c++ function pass-by-reference argument-passing

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

Che*_*Alf 27

#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 );
}
Run Code Online (Sandbox Code Playgroud)

干杯&hth.,

  • @FredOverflow:因为指针可以为null或无效.引用保证它是有效的而不是null(没有空引用),或者程序中存在错误. (13认同)
  • 我认为有很大的不同.如果你使用每个API中的引用构建整个代码库,其中null不是一个合理的值,那么`sometype&ref =*ptr;`情况就不会出现,因为你会在任何地方都有引用.在API中接受引用和指针之间也存在语义差异.接受引用明确指出不能使用null调用该函数.如果它是一个引用,那么它是调用者的责任,如果它是一个指针,那么它就是被调用者. (7认同)
  • @Alf P.施泰因巴赫:"要不,有在程序中的错误"这在理论上听起来不错,但如果你有像`sometype.这时候和REF =*PTR;`在指针的地址将被简单地复制到地址引用,可以是无效的或无效的.当`ptr`无效或为null时,您可能会说上面的语句是未定义的行为,但在编译或运行时不会有任何此类迹象,因此仍需要程序员确保它是有效且非null,就像使用指针一样.所以我说程序员没有任何区别. (4认同)