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

    int(a)(1); 

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

Ho visto questa dichiarazione in un programma C++. Questo non ha provocato un errore di sintassi.cos'è int (a) (1)? è una sintassi C++ valida?

Che cos'è a qui? Questa sintassi C++ è valida?

+4

Ora la domanda è: Chi nel mondo ha scritto? – Mysticial

+5

Forse la barra spaziatrice era rotta. –

+0

potrebbe essere il risultato di una macro espansione o di qualche altra forma di generazione del codice –

risposta

28

E 'bene a mettere il nome della variabile tra parentesi:

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

Quindi nel tuo caso:

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

Ora per una domanda bonus - perché! –

+7

@Martin: i tipi sono in qualche misura componibili e il set di parentesi extra consente il raggruppamento di sottoespressioni. La lingua avrebbe potuto vietare l'uso di parentesi dove non strettamente richiesto, ma non l'hanno fatto. Ad esempio, 'int (X)()' dichiara che 'X' deve essere una * funzione * senza argomenti e che restituisce' int', ora, se 'X' è' * Y', allora è un puntatore a [.. .], se 'Y' è' Z [10] 'sarà una matrice di 10 puntatori alle funzioni ... Le parentesi sono necessarie per il raggruppamento in molti casi, quindi perché proibirle in altre? ... considerando che sono permessi in qualsiasi altro luogo in cui si raggruppa la parentesi. –

+1

@MartinBeckett: E aggiungere a un altro linguaggio perché piuttosto che un "morale", perché, § 8/4 lo consente esplicitamente nella grammatica. E il §6.8 rimuove l'ambiguità con le espressioni-espressioni ('T (e) [5]' potrebbe significare dichiarare 'e' con il tipo' T [5] ', o lanciare' e' in un 'T' e indice indice 5; in questi casi ambigui, una dichiarazione è sempre il risultato). – GManNickG

Problemi correlati