2010-07-13 11 views
1

Quelle est la différence entre:Différence entre la variable const et le type const variables

const variable = 10;

et

const int variable = 10;

Est-variable selon la norme, s'interprété comme un type intégral lorsque aucun type n'est défini?

+0

ints implicite sont généralement mal vus (au moins par moi en tout cas) –

+2

int @ Paul implicite ne se produit pas dans ce cas. –

+0

@Neil: Je suppose qu'il compile en réalité C plutôt que C++ comme étiqueté (sinon son compilateur est quelque peu cassé) –

Répondre

8

const variable = 10 est pas C++ valide, tandis que const int variable = 10; est.

La seule fois (que je peux penser) que const variable = 10 serait valide est si vous aviez un type nommé variable et vous avez eu une fonction avec un paramètre sans nom de ce type, en prenant un argument par défaut:

typedef int variable; 
void foo(const variable = 10); 
+0

Hmm, ça marche! :) –

+0

@Changeling: Utilisez-vous C ou C++? Il y a une différence. –

+0

Je l'ai dans un fichier d'en-tête et il n'y a pas de typedef: 'const MAX_RCV_TIMEOUT_COUNTER = 500/ML_RCV_THREAD_DELAY;' –

0

Sans règles strictes (K & RC etc. Edition: c'est-à-dire ancien C), int est le type par défaut. Cela ne signifie certainement pas que la variable n'a aucun type, et cela n'a rien à voir avec const.

+2

La question est étiquetée C++. K & R C a (ou du moins devrait avoir) rien à voir avec ça. –

+0

Beaucoup de débutants mélangent C et C++ ... Et, plus sérieusement, l'ancien C++ est basé sur un C plus ancien (celui dont je parle): si son compilateur n'est pas mis à jour, il insère silencieusement int 'entre const et variable. Editer: Apparemment, même dans C99 les implicites sont autorisés ... Mais en C++ il doit être vieux. –

+2

À droite, mais la norme C++ indique que les entrées implicites sont * non * autorisées. Si le compilateur, lors de la construction du code C++, n'émet même pas d'avertissement à ce sujet, quelque chose ne va pas avec le compilateur ou la manière dont il est appelé. –

1
const variable = 10; 

ne compilera pas dans presque tous les nouveaux compilateurs C++ modernes.

2

Cela signifie que x est implicitement déclaré int. Ceci n'est pas autorisé en C++, mais en C et pour maintenir la compatibilité avec les en-têtes C ou le code pré-ISO C++, beaucoup de compilateurs C++ contemporains supportent encore cela en option.

Mon compilateur GCC 4.4 ici groks "const x = 3;" lorsque feed -fms-extensions sur la ligne de commande (le manuel dit, qu'il allume un couple de lampes qui sont nécessaires pour comprendre le code MFC)

MISE À JOUR: Je l'ai vérifié avec VS-2005, vous pouvez avoir int implicite si vous utilisez

#pragma warning(disable:4430) 
Questions connexes