Question

L'ancien familier:

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

Cette syntaxe est parfaite. Aucun problème.

Maintenant, quand nous pouvons écrire typedefs comme ci-dessus, quel est le point de permettre cette syntaxe:

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

Juste pour les programmeurs Confuse? Est-ce la syntaxe même nécessaire partout (alors que nous avons le précédent)? Que pensez-vous du point de vue des compilateurs? Est-ce qu'ils trouvent mignon ou fou? Ou il n'a pas d'importance aux compilateurs du tout?


Par ailleurs, ce code est venu d'ici:

Dans le cas si vous vous demandez si cela est une erreur de syntaxe, puis consultez le code de travail ici à ideone.

Autres conseils

La question est "pourquoi il vous embrouille?"

La syntaxe provient de la grammaire de spécificateurs de déclaration en C ++, ce qui est très général, et utilisé pour beaucoup de choses en C ++. L'ordre de déclaration spécificateurs n'a pas d'importance. Regardez ceux-ci:

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

Ce sont équivalents à:

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

Si vous les regardez assez, vous pouvez trouver longtemps que la syntaxe est réellement uniforme et logique. lire aussi la grammaire de C ++ peut aider.

Je ne connaissais pas cette syntaxe, bien que mon g ++ semble l'accepter ... mais d'un point de vue du compilateur, il rend les choses plus difficile l'analyse: lorsque vous rencontrez un jeton d'int, vous ne savez pas si vous êtes parsing une définition de type (et un typedef est sur le point d'arriver) ou vous êtes analyse d'une définition de variable / fonction ...

Le seul sens, il fait d'avoir A typedef B est si l'on considère typedef d'être un opérateur binaire (au sens d'une affectation de type comme A = B).

Je ne suis pas sûr que cela est autorisé par Standart. Mais comme nous savons qu'il ya beaucoup de choses en c ++ qui a permis, mais ont une syntaxe ilogical. Par exemple ce genre de choses 1[a], "hello"[2];// ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top