Maison >développement back-end >C++ >Pourquoi ne puis-je pas lier une référence Lvalue non-Const à une Rvalue en C ?

Pourquoi ne puis-je pas lier une référence Lvalue non-Const à une Rvalue en C ?

DDD
DDDoriginal
2024-10-31 04:07:34364parcourir

 Why Can't I Bind a Non-Const Lvalue Reference to an Rvalue in C  ?

Impossible de lier une référence Lvalue non-const à Rvalue : une résolution

L'extrait de code donné a rencontré une erreur lors de l'initialisation d'un objet de la classe Foo au sein du constructeur de la classe Bar. Le message d'erreur indique qu'une référence lvalue non const (Foo f) est liée à une rvalue (le résultat de l'appel de genValue()).

En C, les paramètres de référence non const ne peuvent faire référence qu'à des noms nommés. variables (valeurs). Cependant, le résultat de genValue() est une valeur temporaire (rvalue). Pour résoudre ce problème, nous devons transmettre la valeur de genValue() par valeur (int).

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

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

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

En changeant l'argument du constructeur en int, nous pouvons maintenant initialiser l'objet Foo dans la portée du constructeur sans des 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