Domanda

Il vecchio familiare:

typedef int cute_int; //cute : common and familiar syntax. 

Questa sintassi è perfetto. Nessun problema.

Ora, quando possiamo scrivere typedef come sopra, allora qual è il punto di consentire questa sintassi:

int typedef crazy_int; //crazy : uncommon and unfamiliar syntax.

Solo per i programmatori Confuse? E 'questa sintassi anche necessaria ovunque (quando in realtà noi abbiamo quello precedente)? Cosa ne pensi dal punto di vista dei compilatori? Non lo trovano carino o pazzo? O non importa ai compilatori a tutti?


A proposito, questo codice è venuto da qui: L'utilizzo di typename parola chiave con typedef e nuovi

Nel caso in cui vi state chiedendo se questo è errore di sintassi, quindi controllare il codice di lavoro qui a Ideone.

Altri suggerimenti

La domanda è: "perché ti confonde?"

La sintassi viene dalla grammatica della specificatori dichiarazione in C ++, che è molto generale, e utilizzato per molte cose in C ++. L'ordine di identificatori di dichiarazione non ha importanza. Guardate questi:

int virtual f() const, *g(int);
int ptr1, *ptr2;
int typedef const *name1, name2;

Queste sono pari a:

virtual int f() const;
virtual int* g(int);
int ptr1;
int *ptr2;
typedef const int* name1;
typedef const int name2;

Se li guardi abbastanza a lungo si può trovare che la sintassi è in realtà uniforme e logico. leggere anche la grammatica del C ++ può aiutare.

Non ero a conoscenza di questa sintassi, anche se il mio g ++ sembra accettarlo ... ma dal punto di vista del compilatore, rende l'analisi le cose più difficili: quando si incontra un token int, non si sa se si sta parsing una definizione di tipo (e un typedef sta per accadere) oppure si sta analizzando una definizione / funzione di variabili ...

L'unico senso abbia avere A typedef B è se si considera typedef di essere un operatore binario (nel senso di un incarico di tipo A = B).

Non sono sicuro che questo è consentito dalla standart. Ma, come sappiamo che c'è un sacco di cose in C ++ che ha permesso, ma hanno la sintassi ilogical. Per esempio questo tipo di cose 1[a], "hello"[2];// ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top