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!