Maison >développement back-end >C++ >Comment initialiser une variable membre Const dans un constructeur C ?

Comment initialiser une variable membre Const dans un constructeur C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-03 02:54:03336parcourir

How to Initialize a Const Member Variable in a C   Constructor?

Comment initialiser un champ immuable dans un constructeur : une exploration approfondie

En C, il est possible de rencontrer un scénario où vous avez l'intention de créer une classe qui nécessite un champ immuable dans son constructeur. Dans un tel cas, garantir l’immuabilité du domaine est crucial. Cet article examinera l'approche appropriée pour atteindre cet objectif.

Considérons un scénario dans lequel la classe Foo sert de structure de données et la classe Bar est un wrapper autour de Foo qui nécessite un pointeur Foo comme argument lors de la construction. Notre objectif est de garantir que ce pointeur reste immuable pendant toute la durée de vie d'une instance de Bar.

Une tentative d'initialisation du pointeur const foo dans le constructeur de Bar pourrait ressembler à ce qui suit :

<code class="cpp">class Foo;

class Bar {
public:
    Foo * const foo;
    Bar(Foo* foo) {
        this->foo = foo; // Compiler error
    }
};

class Foo {
public:
  int a;
};</code>

Cependant , cette approche déclenche une erreur de compilation. Pour le rectifier et établir l'immuabilité de foo dans les instances Bar, nous devons utiliser une liste d'initialisation :

<code class="cpp">Bar(Foo* _foo) : foo(_foo) {}</code>

Dans cette version révisée, le constructeur prend un pointeur Foo comme argument, l'assigne au membre variable foo en utilisant la liste d'initialisation, et renomme la variable entrante pour éviter toute confusion potentielle avec la variable membre.

Cette technique garantit que le pointeur foo est initialisé immédiatement lors de la construction de Bar, le rendant immuable pour le reste de la barre. durée de vie de l'instance.

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