Tout en travaillant mon chemin à travers Le Langage de Programmation C++ (TCPL), je me suis retrouvé à la mise en œuvre du programme de calcul dans le Chapitre 6. Le débogage de mon code, j'ai remarqué que j'avais tapé get_token;
au lieu de get_token();
. Avec l'erreur, le programme compilé, mais il n'a rien fait. Solution facile.
Cela m'a fait penser à ce que le nom d'une fonction. J'ai été à essayer de comprendre où vous n'auriez jamais utiliser simplement le nom de la fonction, sans l' ()
de l'opérateur. Puis il est venu à moi, pointeur de fonction définitions!
Malheureusement, comme je l'ai joué un peu avec ce que j'ai une fois de rappeler à propos des pointeurs de fonction, j'ai trouvé que je pouvais pas bien comprendre ce qui se passait.
Voici ce que j'ai été jouer avec:
void foo() {
cout << "Foo to you too!\n";
};
int main() {
void (*p1_foo)() = foo;
void (*p2_foo)() = *foo;
void (*p3_foo)() = &foo;
void (*p4_foo)() = *&foo;
void (*p5_foo)() = &*foo;
void (*p6_foo)() = **foo;
void (*p7_foo)() = **********************foo;
(*p1_foo)();
(*p2_foo)();
(*p3_foo)();
(*p4_foo)();
(*p5_foo)();
(*p6_foo)();
(*p7_foo)();
La partie folle (pour moi en tout cas!) c'est que tous les sept pointeurs travaillé et réussi a appelé la fonction, de l'imprimerie Foo to you too!
... en Effet!!
Donc ce qui se passe réellement ici?