Maison  >  Article  >  développement back-end  >  Comment résoudre l'erreur « Impossible de lier une référence de valeur non const » dans les constructeurs C ?

Comment résoudre l'erreur « Impossible de lier une référence de valeur non const » dans les constructeurs C ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-30 07:58:02999parcourir

How to Resolve the

Gestion de l'erreur « Impossible de lier une référence de valeur non const » dans le constructeur C

Lors de la tentative d'initialisation d'un objet privé dans un constructeur, vous rencontrez l'erreur "ne peut pas lier une référence lvalue non const de type 'int&' à une rvalue de type 'int'" peut être frustrante. Cette erreur se produit lorsqu'une référence lvalue (un alias vers une variable nommée) est attendue mais que l'argument passé est une rvalue (une valeur temporaire ou littérale).

Dans le code donné, l'erreur se produit car la classe Foo Le constructeur prend un paramètre de référence non const (int &x), qui doit faire référence à une lvalue. Cependant, la fonction genValue() renvoie une rvalue, car elle crée une variable int temporaire qui est détruite une fois la fonction renvoyée.

Pour résoudre cette erreur, nous devons éviter de lier la référence lvalue à une rvalue. Voici un aperçu de quelques solutions potentielles :

Pass by Value

La solution la plus simple consiste à transmettre la valeur renvoyée par genValue() par valeur au constructeur Foo. Cela signifie changer le constructeur dans la classe Foo de Foo(int &x) à Foo(int x).

Créer une variable temporaire

Alternativement, vous pouvez créer une variable temporaire int à l'intérieur du constructeur de Bar, attribuez-lui le résultat de genValue(), puis transmettez la référence à cette variable temporaire au constructeur Foo. Cette approche garantit qu'une lvalue est disponible pour se lier à la référence non const.

Utilisez des pointeurs intelligents

Si vous souhaitez utiliser des pointeurs intelligents, vous pouvez créez un unique_ptr pour gérer la durée de vie de l'objet Foo. Cela vous permet de transmettre le pointeur vers l'objet Foo au constructeur Foo par référence, car il s'agit d'une lvalue.

En implémentant l'une de ces solutions, vous pouvez gérer efficacement l'erreur susmentionnée et initialiser correctement le Foo privé objet dans le constructeur de Bar.

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