Ho un dubbio con il metodo del risultato del pass-by-value. Per quanto ho capito, passa il valore del parametro alla funzione, quindi ottiene il risultato al termine della funzione. Ma cosa succede con le eccezioni? Voglio dire, con il seguente codice:
int x = 1
void g(value-result int y) {
y = 5
throw E;
}
try {
g(x);
} catch E {
// do nothing
};
print_value(x);
Qual è il valore stampato? Al momento dell'eccezione, la variabile locale di g è uguale a 5. Tuttavia, la funzione non termina correttamente, quindi la mia domanda è: l'istruzione y=5
modifica effettivamente la variabile x, e quindi viene stampata 5 , o poiché viene generata un'eccezione, la funzione non termina correttamente e quindi 5 non viene dato come risultato di x, e quindi viene stampato 1? La mia ipotesi è che poiché un'eccezione è una terminazione anomala, x non dovrebbe prendere 5. È corretto?