Maison >développement back-end >C++ >Pourquoi `bigCat.*pcat()` ne fonctionne-t-il pas lors de l'appel de fonctions membres via des pointeurs ?
Appel de fonctions via des pointeurs de fonction membre
Lors de l'utilisation de pointeurs de fonction membre, il est crucial de garantir leur invocation correcte. Considérez l'exemple de code :
class cat { public: void walk() { printf("cat is walking \n"); } }; int main(){ cat bigCat; void (cat::*pcat)(); pcat = &cat::walk; bigCat.*pcat(); }
Cependant, une erreur se produit lors de la tentative d'appel de la fonction à l'aide de bigCat.*pcat();. En effet, des parenthèses supplémentaires sont nécessaires dans la syntaxe d'appel de fonction.
Syntaxe correcte pour l'appel des pointeurs de fonction membre
Pour appeler correctement les fonctions membres via les pointeurs de fonction membre, les parenthèses la priorité des opérateurs doit être respectée. La syntaxe correcte pour l'appel de fonction est :
(bigCat.*pcat)();
Cela garantit que l'opérateur d'appel de fonction (()) a une priorité plus élevée que l'opérateur de liaison pointeur vers membre (.*). Les opérateurs unaires ont généralement priorité sur les opérateurs binaires. Par conséquent, les parenthèses sont nécessaires pour spécifier explicitement que la fonction membre walk() est appelée sur l'objet bigCat.
Avec la syntaxe corrigée, le code s'exécutera avec succès et affichera "cat is walking n" dans le console.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!