Pourquoi C insiste sur un constructeur par défaut fourni par l'utilisateur pour les objets Const construisant par défaut
La norme C stipule que la construction par défaut d'un const L'objet nécessite un constructeur par défaut fourni par l'utilisateur. Comprendre la justification de cette exigence améliore notre compréhension de l'initialisation des objets en C.
L'objectif du constructeur par défaut fourni par l'utilisateur pour les objets Const
La principale raison de cette exigence est de garantir l'utilité de l'objet lorsqu'il est initialisé via la construction par défaut. Si la classe ne dispose pas d'un constructeur défini par l'utilisateur, elle est considérée comme une classe POD (plain old data). Les classes POD restent non initialisées par défaut. Ainsi, tenter d'initialiser un objet const d'une classe POD non initialisée donnerait un objet de peu de valeur pratique.
Classes POD vs. Classes non POD
Pour illustrer ceci concept, considérez le struct POD sans constructeur défini par l'utilisateur :
struct POD { int i; }; POD p1; // uninitialized, but we can assign a value later POD p2 = POD(); // initialized const POD p3 = POD(); // initialized const POD p4; // error - uninitialized and cannot be modified
Comme le montre le code, POD non initialisé les cours peuvent être problématiques. Cependant, si nous ajoutons un constructeur défini par l'utilisateur à la classe, il devient non-POD :
struct nonPOD_A { nonPOD_A() {} // this makes non-POD }; nonPOD_A a1; // initialized const nonPOD_A a2; // initialized
Extrait et interprétation standard
La norme C stipule que "Si un programme appelle à l'initialisation par défaut d'un objet d'un type T qualifié par const, T doit être un type de classe avec un constructeur par défaut fourni par l'utilisateur." Cela peut être interprété comme suit :
Si nous déclarons un objet const d'une classe non-POD sans fournir d'initialiseur, le constructeur par défaut est automatiquement invoqué. Cependant, si la classe est POD, l'objet reste non initialisé. Par conséquent, exiger un constructeur par défaut défini par l'utilisateur pour les objets const garantit leur initialisation et leur utilité appropriées.
Conclusion
En conclusion, C exige un constructeur par défaut fourni par l'utilisateur pour construction d'objets const par défaut pour garantir que l'objet reste initialisé et utile lors de sa création. Comprendre la distinction entre les classes POD et non-POD est crucial dans ce contexte. En adhérant à cette règle, C garantit que les objets const initialisés via la construction par défaut remplissent efficacement leur objectif prévu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!