2016-05-20 27 views
0

這裏的MWE:異常不影響價值

#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; 
} 

我希望x會有什麼7.28,但它顯示2.所以異常並沒有改變值。任何人都可以解釋原因嗎?

+1

你有2'x's – vu1p3n0x

回答

3

奇怪的投擲作爲例外加倍。

無論如何 - 你有一個外部x和內部x。內心就是被抓的人。這將獲得值3.14,將其翻倍至6.28並打印出來。外部的將保持不變。

所以最終的cout將增加外x(具有值1)和打印(2)

+0

爲什麼'x'具有雙重身份。這是否意味着'try&catch'可以被看作一個對象或功能? – yuxuan

+0

你有兩個名爲'x'的雙打。 –