Maison > développement back-end > C++ > le corps du texte

Pourquoi C nécessite-t-il un constructeur par défaut défini par l'utilisateur pour les objets constants de construction par défaut ?

Linda Hamilton
Libérer: 2024-11-22 07:01:10
original
946 Les gens l'ont consulté

Why Does C   Require a User-Defined Default Constructor for Default-Constructing Constant Objects?

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
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal