Maison >développement back-end >C++ >Pourquoi les objets Const en C nécessitent-ils un constructeur par défaut défini par l'utilisateur ?

Pourquoi les objets Const en C nécessitent-ils un constructeur par défaut défini par l'utilisateur ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-26 15:31:09917parcourir

Why Do Const Objects in C   Require a User-Defined Default Constructor?

Pourquoi C nécessite un constructeur fourni par l'utilisateur pour l'initialisation par défaut des objets Const

La norme C dicte que lors de l'initialisation par défaut d'un objet d'un Type qualifié par const, le type doit avoir un constructeur par défaut fourni par l'utilisateur. Cette exigence découle de l'interaction entre le concept POD (Plain Old Data) et l'initialisation des objets en C .

En C , les objets des classes non POD sont initialisés par défaut. Cependant, les POD, qui sont des types de données légers sans constructeurs, validateurs ou destructeurs, ne sont pas initialisés par défaut. En effet, les POD sont conçus pour des scénarios sensibles aux performances dans lesquels l'initialisation explicite est plus efficace.

Lors de l'initialisation d'un objet d'un type qualifié par const, la norme impose à un constructeur fourni par l'utilisateur de garantir que l'objet peut être initialisé. Ceci est nécessaire car si la classe sous-jacente est un POD sans constructeur, l'objet resterait non initialisé, le rendant inutile.

Considérez l'exemple de code :

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

struct A {
  A() {} // Why is this required?
  B b; // Just for illustration
};

int main() {
  const A a;
}

Dans ce code, le l'objet a est const-qualifié. Si la classe A n’avait pas de constructeur fourni par l’utilisateur, elle serait considérée comme un POD. Étant donné que les POD ne sont pas initialisés par défaut, a ne serait pas initialisé, ce qui rendrait le code invalide.

Cependant, la classe A a un constructeur fourni par l'utilisateur, ce qui la rend non-POD. Par conséquent, a est initialisé par défaut en appelant le constructeur, et le code est compilé avec succès.

L'exigence de la norme pour un constructeur fourni par l'utilisateur est donc de garantir que les objets de types const-qualifiés peuvent être correctement initialisés et utilisés .

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!

Déclaration:
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