2016-05-20 1 views
0

est ici le MWE:exception n'a pas d'influence sur la valeur

#include <iostream> 
#include <exception> 

using namespace std; 

int main() { 
    double x=1; 
    try { 
     throw 3.14; 
    } 
    catch(double x) { 
     x *= 2; 
     cout << x<<endl; 
    } 
    cout << ++x; 
    return 0; 
} 

Ce que je pense x sera 7,28, mais il montre 2. Ainsi, l'exception n'a pas changé la valeur. Quelqu'un peut-il expliquer la raison?

+1

vous avez 2 '' Pourquoi x's – vu1p3n0x

Répondre

3

Le lancer bizarre double comme exception.

De toute façon - Vous avez un extérieur x et et intérieur x. L'intérieur étant celui pris. Cela va attraper la valeur 3,14, le doubler à 6,28 et l'imprimer. L'extérieur restera inchangé.

Ainsi la finale cout incrémentera la x externe (qui a la valeur 1) et imprimer que (2)

+0

x' a une double identité. Cela signifie-t-il que «try & catch» peut être vu comme un objet ou une fonction? – yuxuan

+0

Vous avez deux doubles nommés 'x'. –