27 votes

Faire des pointeurs de fonction besoin d'une esperluette

En C/C++, si j'ai une des fonctions suivantes:

void foo();
void bar(void (*funcPtr)());

Est-il une différence entre ces deux appels:

bar(foo);
bar(&foo);

?

29voto

ForEveR Points 28133

Non, il n'y a pas de différence, puisque la fonction peut être implicitement converti en pointeur de fonction. Citation de standard (N3376 4.3/1).

Une lvalue de fonction de type T peut être converti en prvalue de type "pointeur vers T." Le résultat est un pointeur vers la fonction.

7voto

Oli Charlesworth Points 148744

Est-il une différence entre ces deux appels:

Non, il n'y a pas de différence.

-2voto

Maarten Points 49

bar(foo); est appelé la version "courte"

bar(&foo); est de savoir comment il est officiellement terminé

Fonctionnellement, il n'y a pas de différence, cependant, les options de seconde est considérée comme "bonne pratique" par la plupart des puisque de cette façon, il est plus évident que foo est en fait un pointeur de fonction et non d'une fonction.

Ceci est similaire à celui des tableaux. Si vous avez:

int foobar[10]; 

alors que foobar est un int *, mais vous pouvez aussi le faire &foobar pour le même résultat.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X