Maison >développement back-end >C++ >Liste d'initialisation des membres et affectations de constructeurs : quand devez-vous utiliser laquelle ?

Liste d'initialisation des membres et affectations de constructeurs : quand devez-vous utiliser laquelle ?

DDD
DDDoriginal
2024-12-23 02:32:37600parcourir

Member Initializer List vs. Constructor Assignments: When Should You Use Which?

Liste d'initialisation vs affectations de constructeurs : différences internes

Lors de l'initialisation des membres de la classe, on peut choisir d'utiliser une liste d'initialisation de membres ou d'attribuer des valeurs au sein du corps constructeur. En interne, ces approches présentent des différences subtiles.

Liste d'initialisation de membres

Utilisation d'une liste d'initialisation de membres, comme le montre cet exemple :

MyClass::MyClass(): _capacity(15), _data(NULL), _len(0)
{
}

initialise les variables membres directement avant d'entrer dans le corps du constructeur. Ceci est particulièrement utile pour :

  • Initialisation des membres constants : Ces membres doivent être initialisés avant l'exécution du corps du constructeur, et une liste d'initialisation de membres est le seul moyen de le faire.
  • Initialisation des références : Les références doivent être initialisées avant le corps du constructeur, et une liste d'initialiseurs de membres est le méthode préférée.
  • Passer des paramètres aux constructeurs de classe de base : Lors de l'héritage d'une classe de base avec un constructeur paramétré, les membres de la classe de base doivent être initialisés à l'aide d'une liste d'initialisation de membres.

Affectations de constructeurs

D'autre part, l'attribution de valeurs dans le corps du constructeur, comme dans cet exemple :

MyClass::MyClass()
{
  _capacity=15;
  _data=NULL;
  _len=0
}

effectue l'initialisation lors de l'exécution du constructeur. Cette approche est couramment utilisée pour les membres non constants et les membres qui peuvent être initialisés en fonction des paramètres du constructeur.

Comparaison du code généré

Généralement, les deux approches génèrent des code. Cependant, dans le cas de membres ou de références constants, seule une liste d'initialisation de membres peut les initialiser, car les affectations de constructeur entraîneraient des erreurs de compilation.

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