Maison >développement back-end >C++ >Est-ce que `widget w(gadget(), doodad());` est une déclaration de variable en C ?

Est-ce que `widget w(gadget(), doodad());` est une déclaration de variable en C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-19 07:53:02929parcourir

Is `widget w(gadget(), doodad());` a Variable Declaration in C  ?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn