2010-07-30 6 views

Répondre

6

Si une classe a des variables membres const-qualifiés, alors pour tout constructeur défini pour cette classe, ces variables doivent être initialisées dans la liste d'initialisation du constructeur. Si un constructeur défini n'initialise pas une variable membre const-qualifiée, le programme est mal formé.

Dans votre exemple de code, someClass n'a aucun constructeur déclaré par l'utilisateur, il existe donc un constructeur par défaut implicitement déclaré. Cependant, si ce constructeur n'est pas utilisé, il n'est pas défini. Comme vous n'instantiez aucun objet someClass, le constructeur n'est pas utilisé. Par conséquent, votre code d'exemple n'a aucune erreur.

Si vous deviez définir un constructeur de la classe et non initialiser le membre const,

class someClass 
{ 
    someClass() { } // error, does not initialize const-qualified x 
    int const x; 
}; 

ou si vous deviez instancier une instance de someClass (qui provoquerait le constructeur par défaut déclaré implicitement à définir), alors le programme serait mal formé.

+2

Je pense que vous vouliez dire "définir un constructeur"? – Jacob

+2

@Jacob: Destructeur ... constructeur ... même chose, non? : -O Merci pour la correction. –

+0

Lol, pas de problème :) – Jacob

4

Essayez ceci:

int main() 
{ 
    someClass obj; 
    return 0; 
} 

Puisque vous n » t instancié votre objet, votre compilateur n'a pas jeté une erreur. Vous savez probablement la bonne façon d'initialiser x mais je le mets juste au cas où.

class someClass 
{ 
    int const x; 
public: 
    someClass():x(10){} 
};