passaggio per valore risultato con eccezioni [chiuso]

0

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?

    
posta Mark 16.04.2015 - 16:31
fonte

1 risposta

3

In definitiva, dipende dalle specifiche del linguaggio specifico che stai usando, ma in generale, pass-by -valore-risultato (Wikipedia) significa che il valore originale del chiamante non verrà modificato fino a quando la funzione non ritorna, quindi l'unica cosa ragionevole da aspettarsi è che il valore rimanga invariato nel caso di un'eccezione, perché quando viene lanciata un'eccezione, la funzione non può essere realmente detta per tornare.

    
risposta data 16.04.2015 - 17:07
fonte