"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que não consigo vincular uma referência Lvalue não-Const a um Rvalue em C++?

Por que não consigo vincular uma referência Lvalue não-Const a um Rvalue em C++?

Publicado em 2024-12-22
Navegar:659

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

Não é possível vincular referência de Lvalue não const a Rvalue: uma resolução

O trecho de código fornecido encontrou um erro ao inicializar um objeto da classe Foo dentro do construtor da classe Bar. A mensagem de erro indica que uma referência de lvalue não const (Foo f) está sendo vinculada a um rvalue (o resultado da chamada de genValue()).

Em C , parâmetros de referência não const só podem se referir a nomeados variáveis ​​(lvalores). No entanto, o resultado de genValue() é um valor temporário (rvalue). Para resolver esse problema, precisamos passar o valor de genValue() por valor (int).

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;
    }
};

Ao alterar o argumento do construtor para int, agora podemos inicializar o objeto Foo dentro do escopo do construtor sem erros.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3