2016-03-23 49 views
0

Bir işlev işaretçisini bildiren kodu göz önünde bulundurun ve bir işleve işaret edin., bu iki notasyon arasındaki fark nedir?

void MyIntFunction(int x){ 
    std::cout << x << '\n'; 
} 

void (*funcPtr)(int) = MyIntFunction; 
void (*funcRef)(int) = &MyIntFunction; 


(*funcPtr)(2); 
(*funcRef)(2); 

Bu kod benim Xcode iyi çalışır ve işlev işaretçisi atarken soru, MyIntFunction ve &MyIntFunction Resmen

+0

Her iki fark da kullanılamaz ... –

+0

Fark yok – vu1p3n0x

+0

"atama referansı"? Ne referansı? Gönderdiğiniz kodda referans yok. – AnT

cevap

3

MyIntFunction arasındaki fark nedir bir fonksiyon türüdür ve &MyIntFunction göstericisidir edilir -to-işlev türü. Ancak, işlev türü , hemen hemen tüm bağlamlarda işaretçi-işlev türüne bozulur, bu nedenle bu bağlamda MyIntFunction ve &MyIntFunction kullanımı arasında gerçek bir fark yoktur.

Lütfen, gönderilen kodun herhangi bir yerinde referansı olduğunu unutmayın. Hem funcPtr hem de funcRef, işaretçilerdir.

+0

Gerçekten de '&' sadece görüyorum – vu1p3n0x

+0

işlevinin adresini alır. Çok teşekkür ederim. Değişken adı funcRef değişmez, böylece diğer insanlar bulut bunu fark eder :) – Curtis2

+2

Ayrıca, fonksiyon göstergesinin bozulmasının özellikleri nedeniyle, '(* funcPtr) (2)' 'funcPtr (2)' ile aynıdır. aynı zamanda '(******* funcPtr) (2)' – vu1p3n0x