L'analyse la plus vexante de C résolue
Le problème se pose avec un code comme le suivant :
widget w(gadget(), doodad()); // Pitfall: Not a Variable Declaration
Un pourrait supposer que ce code déclare une variable nommée w de type widget. Cependant, ce n'est pas le cas.
En C , les arguments de type array se désintègrent en pointeurs vers le premier élément, et les arguments de type function se désintègrent en un pointeur de fonction. Cela signifie que la signature de la fonction déclarée est :
widget w(gadget(*)(), doodad(*)());
Cette fonction prend deux arguments : l'un est un pointeur vers une fonction ne prenant aucun argument et renvoyant un gadget, et l'autre est un pointeur vers une fonction ne prenant aucun argument et renvoyant un gadget. La fonction elle-même renvoie un widget.
Des cas encore plus déroutants surviennent lorsque des parenthèses supplémentaires sont ajoutées aux arguments de la fonction, comme dans :
widget w(gadget(x));
Il semble qu'elle doive déclarer une variable nommée x de tapez gadget, mais il déclare en fait une fonction qui prend un premier argument nommé x de type gadget et renvoie un widget.
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!