Siguiendo con los desafíos de programación: uno con C++.⭐️✨⚡️

Si bien podríamos modificar tanto la función como la invocación para evitar el error, en este caso tenemos 4 variantes de la función, pero solo una de ellas corrige el error.

Aclaración: el programa que se muestra es solo para “jugar” a descifrar el error. No tiene ningún sentido ni “hace” nada en especial.

Click aquí para desplegar la solución. 👈
✅ La respuesta correcta es la B.

✏️ Explicación:

El código original ocasiona un error debido a que la función recibe el primer parámetro por referencia, pero en la invocación se está pasando como argumento la expresión a+b. Esta operación genera un valor temporal (con el resultado de a+b) que se descarta tan pronto la expresión es usada, por lo que no es posible crear una referencia a él.

❌ A. Además de que no soluciona el error antedicho, no corresponde poner una instrucción return debido a que la función es de tipo void.
✔️ B. Esta es la opción correcta. Aunque el argumento a+b sigue estando almacenado de manera temporal, const extiende su tiempo de vida, permitiendo leer ese valor (mas no modificarlo) dentro de la función.
❌ C. En esta opción se indica que todos los parámetros sean pasados por referencia, lo cual altera el resultado final sin corregir el error.
❌ D. Cambiar el tipo de la función y hacer que retorne un valor entero no soluciona el problema.


Solución al desafío



Desafío C++ 👇
Desafío C++ número 6

Click aquí para una versión accesible de la infografía (apta para lectores electrónicos)
 

El siguiente código arroja un error de compilación:

void f(int &x, int y, int z){
    y = y+1;
    z = z+x;
}
int main()
{
    int a = 2;
    int b = 3;
    f(a+b, a, a);
    cout << a;
}

¿Con cuál de estas modificaciones compilaría exitosamente?

Opción A:

void f(int &x, int y, int z){
    y = y+1;
    z = z+x;
    return x;
}

Opción B:

void f(const int &x, int y, int z){
    y = y+1;
    z = z+x;
}

Opción C:

void f(int &x, int &y, int &z){
    y = y+1;
    z = z+x;
}

Opción D:

int f(int &x, int y, int z){
    y = y+1;
    z = z+x;
    return x;
}