Recientemente se confundió por la siguiente C++ fragmento:Expresión orden de evaluación
#include <cstdio>
int lol(int *k){
*k +=5;
return *k;
}
int main(int argc, const char *argv[]){
int k = 0;
int w = k + lol(&k);
printf("%d\n", w);
return 0;
}
Echa un vistazo a la línea:
int w = k + lol(&k);
Hasta ahora yo pensaba que sería evaluado esta expresión de izquierda a derecha : tome el valor actual de k (que antes de llamar a la función lol es 0) y luego agréguelo al resultado de la función lol. Pero compilador me demuestra que estoy equivocado, el valor de w es 10. Incluso si cambio de lugares para que sea
int w = lol(&k) + k;
el resultado sería todavía 10. ¿Qué estoy haciendo mal?
Tomek
nada, '+' es la última operación – volody