2009-10-26 7 views
4

Un spécificateur de type est-il requis ici?Le spécificateur de type est-il requis pour const?

const c = 7; 

Le langage de programmation C++ de Bjarne Stroustrup à la page 80 indique que cela est illégal. Cependant, j'ai pratiqué quelques tests brainbench, et l'une des questions indique que le type par défaut int. Brainbench est généralement correct, donc je ne suis pas sûr de la référence qui est juste, et j'ai été incapable de trouver quelque chose dans la norme. Est-ce que quelqu'un a une réponse définitive et une référence?

Répondre

14

Le type par défaut de int est valide pour C, mais pas pour C++. Même en C, ce style de codage devrait être évité. Notez également que le livre de Bjarne Stroustrup est l'une des références les plus officielles pour le C++ standard.

+4

Le plus court de la norme elle-même bien sûr. – MSalters

+0

@MSalters D'accord. Modifié le message pour refléter cela. –

+0

Il semble dommage que ce code ne soit pas légal étant donné que le standard C++ 0x (draft) se déplace vers l'inférence de type: auto x = 7; // x est supposé être un int de typeof (7) Plus d'informations sur la FAQ de Bjarne: http://www.research.att.com/~bs/C++0xFAQ.html#auto – JBRWilkinson

2

Je ne peux pas parler à la norme ... mais juste en regardant une déclaration comme const c = 7; crie le mauvais style de code pour moi. En ce qui concerne la compatibilité du compilateur ... il va probablement être aléatoire. Le compilateur de Microsoft Visual Studio n'en aura aucune partie lors de la compilation d'un fichier C++ (extension .cpp) mais ne s'étouffe pas lors de la compilation d'un fichier C (extension .c) principalement parce que le standard C autorise les variables par défaut comme int quand aucun type n'est spécifié.

+1

Malheureusement, ces types de tests demandent des choses extrêmement ésotériques, des faits sur lesquels vous ne pourriez jamais compter si vous écriviez du code (si vous le comprenez, il est presque certain que la prochaine personne ne le fera pas!) – Taras

3

Pour C++, je crois que Stroustrup sur n'importe quel lieu, mais un standard. Peut-être que la question portait sur C non C++?

La draft C++0x standard dans la section 7.1.6 dit

Au moins un fi type spécifique er qui n'est pas un fi cv-quali er est nécessaire dans une déclaration à moins qu'il déclare un constructeur, destructor ou conversion function.83 A type-speci fi er-seq ne doit pas dé fi nir une classe ou une énumération sauf si apparaît dans le type-id d'une alias-declaration (7.1.3).

Questions connexes