Heim > Backend-Entwicklung > C++ > Ist „widget w(gadget(), doodad());' eine Variablendeklaration in C?

Ist „widget w(gadget(), doodad());' eine Variablendeklaration in C?

Linda Hamilton
Freigeben: 2024-11-19 07:53:02
Original
914 Leute haben es durchsucht

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

C's ärgerlichste Analyse gelöst

Das Problem tritt mit Code wie dem folgenden auf:

widget w(gadget(), doodad());  // Pitfall: Not a Variable Declaration
Nach dem Login kopieren

Eins Man könnte annehmen, dass dieser Code eine Variable namens w vom Typ Widget deklariert. Dies ist jedoch nicht der Fall.

In C zerfallen Argumente vom Typ Array in Zeiger auf das erste Element und Argumente vom Typ Funktion in einen Funktionszeiger. Dies bedeutet, dass die Signatur der deklarierten Funktion wie folgt lautet:

widget w(gadget(*)(), doodad(*)());
Nach dem Login kopieren

Diese Funktion benötigt zwei Argumente: eines ist ein Zeiger auf eine Funktion, die keine Argumente akzeptiert und ein Gadget zurückgibt, und das andere ist ein Zeiger auf eine Funktion Ich nehme keine Argumente an und erwidere einen Trottel. Die Funktion selbst gibt ein Widget zurück.

Noch verwirrendere Fälle entstehen, wenn zusätzliche Klammern zu Funktionsargumenten hinzugefügt werden, wie in:

widget w(gadget(x));
Nach dem Login kopieren

Das sieht so aus, als ob eine Variable mit dem Namen x of deklariert werden sollte Typ Gadget, aber es deklariert tatsächlich eine Funktion, die ein erstes Argument namens x vom Typ Gadget akzeptiert und ein Widget zurückgibt.

Das obige ist der detaillierte Inhalt vonIst „widget w(gadget(), doodad());' eine Variablendeklaration in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage