7
votes

Pourquoi les parenthèses sont-elles importantes dans la déclaration du pointeur de la fonction?

Je ne comprends pas pourquoi la déclaration ci-dessous est acceptée: xxx

tandis que ce qui suit ne fait pas: xxx

je suis Utilisation de MSVC6 (je sais que c'est obsolète et non standard, mais il est nécessaire de conserver un système de revenus annuel du dixième million de dollars: /)


1 commentaires

Notez que toutes ces déclarations TYPEDEF sont valides. Aucun n'est invalide C ++.


3 Réponses :


15
votes

Le symbole du pointeur se lie au type par défaut, le pointeur de fonction a donc besoin de la parenthèse pour indiquer que le pointeur est en réalité sur le nom et non sur le type de retour.


0 commentaires

8
votes

Sans les parenthèses, vous déclarez une fonction renvoyant un void * , pas un pointeur sur une fonction renvoie vide . .


0 commentaires

4
votes

Le code ci-dessous est accepté sans girez par GCC 4.2.1 sur MacOS X 10.6.5 avec le compilateur défini sur Fussy: xxx

code: xxx

Le premier donne un pointeur à une fonction renvoie vide ; Ces deux derniers sont équivalents (l'espacement ne fait aucune différence) et vous donnent un type qui est «Fonction (prise en charge de LPVoid) qui renvoie le pointeur à vide».

Vous pouvez les utiliser pour déclarer les pointeurs de fonction: xxx

amusement, n'est-ce pas ...


0 commentaires