Frage

Die altbekannten ein:

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

Diese Syntax ist perfekt. Kein Problem.

Wenn wir jetzt typedefs wie oben schreiben können, was ist dann der Punkt, der damit diese Syntax:

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

Nur um confuse Programmierer? Diese Syntax wird auch überall benötigt wird (wenn in der Tat haben wir die vorherigen)? Was halten Sie von der Sicht der Compiler? Sie finden sie es nett oder verrückt? Oder es spielt keine Rolle, zu den Compiler überhaupt?


Übrigens, dieser Code kam von hier: Verwendung von Typnamen Stichwort mit typedef und neuer

Im Fall, wenn Sie sich fragen, ob der Syntaxfehler ist, dann schaut Sie der Arbeits Code hier bei ideone.

Andere Tipps

Die Frage ist "warum es Sie verwirrt?"

Die Syntax stammt aus der Grammatik der Erklärung Bezeich in C ++, die sehr allgemein gehalten ist, und für viele Dinge in C ++ verwendet. Die Reihenfolge der Erklärung Planer spielt keine Rolle. Schauen Sie sich diese:

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

Diese sind äquivalent zu:

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

Wenn man sie anschaut lange genug können Sie feststellen, dass die Syntax tatsächlich einheitlich und logisch ist. Auch die Grammatik von C ++ lesen kann helfen.

war ich von dieser Syntax nicht bewusst, obwohl meine g ++, es zu akzeptieren scheint ... aber von einem Compiler Sicht macht es Dinge Parsen härter: wenn Sie ein int Token begegnen, Sie wissen nicht, wenn Sie Parsing eine Typdefinition (und ein typedef ist zu geschehen) oder Sie sind eine Variable / Funktionsdefinition ...

Parsen

Das macht es nur Sinn A typedef B zu haben ist, wenn Sie typedef betrachten ein binärer Operator zu sein (im Sinne einer Typzuweisung als A = B).

Ich bin nicht sicher, dass dies nach Norm erlaubt. Aber wie wir wissen, gibt es eine Menge Dinge in c ++, dass erlaubt, aber haben ilogical Syntax. Zum Beispiel dieser Art von Dingen 1[a], "hello"[2];// ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top