2011-08-22 21 views
8

İşlev işaretçileri hakkında ve bunları diğer işlevler için parametre olarak kullanma hakkında okuyorum. Sorum şu; bir işlevi, işaretçileri kullanmadan nasıl referans gösterebilirdiniz? İnternetteki cevabı bulmaya çalışıyorum ama iyi bir cevap bulamadım. Değişkenleri şu şekilde referans olarak iletebileceğinizi biliyorum: void funct(int& anInt);. Buna benzer bir şeyi nasıl yaparsınız, ancak bir değişkene yapılan bir referans yerine, bir işleve yapılan bir referans parametre miydi? Ayrıca, bir işlev gövdesindeki işlev için bir referansı nasıl kullanırsınız?C++: Referans işlevine başka bir işleve nasıl geçilir?

+0

Not:. Sen işlevleri geçemez. Referansları veya işaretçileri yalnızca işlevlere iletebilirsiniz. –

cevap

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

Şerefe & hth,

+1

Sadece meraktan dolayı, neden bir işleve bir işaretçi yerine bir işleve başvurmak isterdim? – fredoverflow

+10

@FredOverflow: Bir işaretçi geçersiz veya geçersiz olabilir. Bir başvuru geçerli ve null olmadığını (boş referans yoktur) veya programda bir hata olduğunu garanti eder. –

+4

@Alf P. Steinbach: "ya da programda bir hata var" Bu teoride büyük kulağa hoş geliyor ama eğer sometype ve ref = * ptr gibi bir şeye sahipseniz, imlecin içindeki adres basitçe adrese kopyalanacaktır. geçerli olmayan veya boş olabilecek referansta. Yukarıdaki ifadenin "ptr" değeri geçersiz olduğunda veya null olmadığında tanımlanmamış bir davranış olduğunu söyleyebiliriz, ancak derleme veya çalışma zamanında bunun herhangi bir belirtisi olmayacaktır, bu yüzden emin olmak için programcıya kalmıştır. Bir işaretçi kullandıysanız, geçerli ve boş değil. Yani programcı için bir fark olmadığını söylüyorum. – newacct

İlgili konular