2011-08-22 230 views
8

我一直在閱讀函數指針,並將它們用作其他函數的參數。我的問題是如何通過引用傳遞函數而不使用指針?我一直試圖在互聯網上找到答案,但我沒有找到一個好的答案。我知道你可以像這樣通過引用傳遞變量:void funct(int& anInt);。你會如何做類似於此的事情,而不是對變量的引用,而是對參數的引用?另外你將如何使用函數體中的函數引用?C++:如何將參考函數傳遞給另一個函數?

+0

注意:您不能傳遞功能。您只能傳遞引用或指向函數的指針。 –

回答

22
#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); 
} 

乾杯&心連心,

+1

出於好奇,我爲什麼要使用對函數的引用而不是指向函數的指針? – fredoverflow

+10

@FredOverflow:由於指針可能爲空或無效。一個引用保證它是有效的而不是空的(沒有空引用),否則在程序中有錯誤。 –

+4

@Alf P. Steinbach:「或者說程序中有錯誤」理論上聽起來不錯,但如果你有'sometype&ref = * ptr'之類的東西,'指針中的地址將被簡單地複製到地址中在引用中,可能是無效的或爲空。您可能會說,當'ptr'無效或爲空時,上面的語句是未定義的行爲,但在編譯或運行時不會有任何跡象表明,所以程序員仍然需要確保它有效且非空,與使用指針相同。所以我說程序員沒有任何區別。 – newacct

相關問題