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
Libérer: 2024-11-19 07:53:02
original
908 Les gens l'ont consulté

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
Copier après la connexion

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(*)());
Copier après la connexion

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));
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal