Extension d'initialisation en classe de C 11 : briser les barrières de liaison
Dans C 03, l'initialisation en classe était limitée aux membres const statiques de type intégral ou énumération. Cette limitation découle de préoccupations concernant la violation des règles de l'éditeur de liens qui nécessitent des définitions uniques pour les objets.
Cependant, C 11 assouplit considérablement ces restrictions, permettant l'initialisation en classe de membres non statiques et non const. Cela soulève la question de savoir comment les complications potentielles liées à la liaison ont été résolues.
Contrairement à l'intuition initiale, le fonctionnement de l'éditeur de liens reste en grande partie inchangé. Au lieu de cela, le compilateur assume la responsabilité de gérer les initialisations en classe. Pour ce faire, il garantit qu'une seule définition est générée pour les membres de la classe, même s'ils sont initialisés au sein de la classe.
Ce changement introduit des complexités supplémentaires pour le compilateur, mais l'impact sur le programmeur est généralement minime. . Une mise en garde s'impose lorsqu'un membre de la classe possède plusieurs initialiseurs. Dans de tels cas, le compilateur détermine quel initialiseur est prioritaire en fonction du constructeur spécifique utilisé.
Par exemple, considérons la classe suivante :
class X { int a = 1234; public: X() = default; X(int z) : a(z) {} };
Lors de la création d'un objet à l'aide du constructeur par défaut, la valeur de 'a' est initialisée à 1234. Cependant, si un constructeur qui spécifie explicitement une valeur pour 'a' est utilisé, l'initialisation en classe est ignorée.
X x{5678};
Dans ce cas, le La valeur de « a » dans l'objet « x » sera 5678. Ce comportement garantit que le membre de la classe est toujours initialisé à la valeur la plus appropriée, même en présence de plusieurs initialiseurs.
Dans l'ensemble, l'expansion de Les capacités d'initialisation en classe de C 11 offrent une plus grande flexibilité et commodité aux programmeurs sans compromettre l'intégrité du processus de liaison global.
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!