Maison  >  Article  >  développement back-end  >  Comment initialiser un membre pointeur constant dans un constructeur C ?

Comment initialiser un membre pointeur constant dans un constructeur C ?

DDD
DDDoriginal
2024-11-04 15:05:09157parcourir

How to Initialize a Constant Pointer Member in a C   Constructor?

Initialisation d'un membre pointeur constant dans un constructeur C

Lorsque nous travaillons avec des classes en C, nous pouvons rencontrer des situations où nous devons initialiser un membre pointeur en tant que constante dans le constructeur. Cela garantit que le pointeur reste immuable tout au long de la durée de vie de l'objet.

Considérez l'exemple de code suivant :

<code class="cpp">class Foo;

class Bar {
public:
    Foo * const foo;
    Bar(Foo* _foo) {
        foo = _foo;
    }
};</code>

Dans ce code, le membre foo est marqué comme un pointeur constant. Cependant, la compilation échouera car le pointeur foo est attribué dans le corps du constructeur, ce qui n'est pas autorisé pour les membres constants.

Méthode correcte : initialisation dans la liste d'initialisation

La bonne façon d'initialiser un membre pointeur constant est de le faire dans la liste d'initialisation des membres dans le corps du constructeur. Cela peut être réalisé comme suit :

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

En initialisant foo dans la liste d'initialisation, le compilateur garantit que sa valeur est attribuée au pointeur avant que le constructeur n'entre dans son corps. Cela satisfait à l'exigence selon laquelle les membres constants doivent être initialisés lors de la construction de l'objet.

Dans le code révisé, la variable de paramètre entrante est renommée en _foo pour éviter toute confusion avec le membre foo.

En suivant ceci approche, vous pouvez initialiser des membres de pointeur constants dans le constructeur, en garantissant que leurs valeurs restent immuables tout au long du cycle de vie de l'objet.

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