Pourquoi est-ce que C++, un utilisateur par défaut fourni par le constructeur pour défaut de construire un const objet?

La norme C++ (section 8.5) dit:

Si un programme d'appels pour l'initialisation par défaut d'un objet d'une const qualifiés de type T, T est un type de classe avec un utilisateur par défaut fourni par le constructeur.

Pourquoi? Je ne peux pas penser à une raison pourquoi un utilisateur fourni par le constructeur est requis dans ce cas.

struct B{
  B():x(42){}
  int doSomeStuff() const{return x;}
  int x;
};

struct A{
  A(){}//other than "because the standard says so", why is this line required?

  B b;//not required for this example, just to illustrate
      //how this situation isn't totally useless
};

int main(){
  const A a;
}
  • La ligne ne semble pas être nécessaire dans votre exemple (voir la section ideone.com/qqiXR) parce que vous avez déclaré, mais n'a pas de définition/initialiser a, mais gcc-4.3.4 l'accepte, même lorsque vous ne (voir la section ideone.com/uHvFS)
  • L'exemple ci-dessus les deux déclare et définit a. Comeau produit une erreur "variable const "un" exige un initialiseur de classe "A" n'a pas déclaré explicitement le constructeur par défaut" si la ligne est commentée.
  • open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#253
  • C'est corrigé dans C++11, vous pouvez écrire const A a{} 🙂
InformationsquelleAutor Karu | 2011-09-14