2012-08-01 5 views
19
#include <iostream> 
int main() 
{ 
    ------- some statements --------- 

    int(a)(1); 

    -------- some other statments ....... 
    return 0; 
} 

Ich sah diese Anweisung in einem C++ - Programm. Dies führte nicht zu einem Syntaxfehler.Was ist Int (a) (1)? Ist das eine gültige C++ - Syntax?

Was ist a hier? Ist das gültige C++ Syntax?

+4

Nun ist die Frage: Wer in der Welt hat das geschrieben? – Mysticial

+5

Vielleicht war die Leertaste defekt. –

+0

könnte das Ergebnis einer Makroerweiterung oder einer anderen Form der Codegenerierung sein –

Antwort

28

Es ist in Ordnung, den Namen der Variablen in Klammern zu setzen:

int i; 
int (i); // exact same 

So in Ihrem Fall:

int a(1); // initialized with 1 
int (a)(1); // exact same 
+7

Jetzt für eine Bonusfrage - warum! –

+7

@Martin: Typen sind bis zu einem gewissen Grad zusammensetzbar, und der zusätzliche Klammersatz ermöglicht die Gruppierung von Teilausdrücken. Die Sprache könnte die Verwendung von Klammern verboten haben, wenn dies nicht unbedingt erforderlich ist, aber sie haben es nicht getan. Zum Beispiel deklariert 'int (X)()' 'X' als eine * Funktion *, die keine Argumente annimmt und' int' zurückgibt, jetzt, wenn 'X'' * Y' ist, dann ist es ein Zeiger auf [.. .], wenn "Y" ist "Z [10]" wird es ein Array von 10 Zeigern auf Funktionen sein ... Klammern sind für die Gruppierung in vielen Fällen erforderlich, also warum sie in anderen verbieten? ... in Anbetracht dessen, dass sie woanders erlaubt sind, wo Klammergruppe. –

+1

@MartinBeckett: Und zu einer mehr Sprache hinzufügen, warum eher als eine "moralische" warum, §8/4 ausdrücklich erlaubt es in der Grammatik. Und §6.8 entfernt Mehrdeutigkeit mit Ausdruck-Anweisungen ('T (e) [5]' könnte bedeuten, 'e' mit dem Typ' T [5] 'zu deklarieren, oder" e "zu einem' T' und tiefgestelltem Index 5 zu werfen; In diesen mehrdeutigen Fällen ist eine Deklaration immer das Ergebnis). – GManNickG

Verwandte Themen