Maison  >  Article  >  développement back-end  >  Comment résoudre les erreurs « Impossible de lier une référence de valeur non const » lors de l'initialisation du constructeur ?

Comment résoudre les erreurs « Impossible de lier une référence de valeur non const » lors de l'initialisation du constructeur ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-28 11:31:02699parcourir

How to Address

Gestion des paramètres de référence non const dans l'initialisation du constructeur

En programmation orientée objet, il est souvent nécessaire d'initialiser les membres de la classe dans le constructeur. Cependant, lorsqu'il s'agit d'objets membres qui nécessitent des paramètres de référence non const, il est crucial de comprendre l'approche correcte du passage des paramètres.

Un paramètre de référence non const, noté int&, ne peut se lier qu'à une lvalue, qui représente une variable nommée. Considérez l'exemple d'extrait de code fourni :

<code class="cpp">class Foo {
    Foo(int &x) { this->x = x; }
private:
    int x;
};

class Bar {
    Bar(): f(genValue()){}
private:
    Foo f;

    int genValue(){ int x; ... x = 1; return x; }
};</code>

Dans ce code, l'erreur "ne peut pas lier une référence lvalue non const de type 'int&' à une rvalue de type 'int'" se produit car genValue() renvoie une rvalue, tandis que la variable membre f attend une lvalue (une variable nommée).

Pour résoudre ce problème, il est essentiel de passer le paramètre constructeur par valeur (int, pas int& ou const int&). Ce faisant, la valeur référencée est copiée dans la variable membre, éliminant ainsi le besoin de la lier à une variable nommée.

Voici une version corrigée du code :

<code class="cpp">class Foo {
    Foo(int x) { this->x = x; }
private:
    int x;
};

class Bar {
    Bar(): f(genValue()){}
private:
    Foo f;

    int genValue(){ int x; ... x = 1; return x; }
};</code>

En modifiant le paramètre d'une référence non const à une valeur, le compilateur ne se plaint plus d'une liaison invalide. Il est crucial de comprendre la différence entre les valeurs l et rvalues ​​lorsque vous travaillez avec des paramètres de référence non const pour éviter de telles erreurs.

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