2010-04-18 49 views
3

我學習C++異常,我想澄清的情景:LHS狀態拋出

T function() throw(std::exception); 
... 
T t = value; 
try { t = function(); } 
catch (...) {} 

如果拋出異常,什麼是變量t的狀態? 不變或未定義?

回答

3

保持不變。 t不能被分配,直到function()返回一個值,而function()從不正常返回

+2

這是不正確的。 – 2010-04-18 01:18:29

+0

在一般情況下,你是對的,但在他特定的代碼示例中沒有被覆蓋的賦值操作符,並且默認值不會拋出異常。我認爲他真正想知道的是,如果出現異常,會得到任務的右側 – 2010-04-18 01:34:40

+0

我在這裏是一個無法忍受的屁股,但這些都是OP所依靠的假設,他們是錯誤的。他的編譯器甚至可以在catch-all子句中捕獲硬件異常。這一切都是可以解決的,但代碼將不得不重寫。 – 2010-04-18 02:07:10

3

t未設置,因爲在賦值之前拋出異常。該函數將不得不返回要設置的值t

6

它並不是那麼簡單。您的catch子句還會捕獲賦值運算符爲t對象類引發的異常。 t對象可能被部分分配。永遠不要抓住全部例外情況,並假定最可能發生的事情。

+0

在我的特殊情況下不是拋棄。 但我明白你在說什麼。 謝謝 – Anycorn 2010-04-18 01:32:58

相關問題