"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué no puedo vincular una referencia de valor L no constante a un valor R en C++?

¿Por qué no puedo vincular una referencia de valor L no constante a un valor R en C++?

Publicado el 2024-12-22
Navegar:470

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

No se puede vincular la referencia de valor L no constante a Rvalue: una resolución

El fragmento de código proporcionado encontró un error al inicializar un objeto de clase Foo dentro del constructor de la clase Bar. El mensaje de error indica que una referencia de valor l no constante (Foo f) se está vinculando a un valor r (el resultado de llamar a genValue()).

En C, los parámetros de referencia no constantes solo pueden hacer referencia a valores con nombre variables (valores l). Sin embargo, el resultado de genValue() es un valor temporal (rvalue). Para resolver este problema, necesitamos pasar el 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;
    }
};

Al cambiar el argumento del constructor a int, ahora podemos inicializar el objeto Foo dentro del alcance del constructor sin ningún error.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3