我學習C++異常,我想澄清的情景:LHS狀態拋出
T function() throw(std::exception);
...
T t = value;
try { t = function(); }
catch (...) {}
如果拋出異常,什麼是變量t的狀態? 不變或未定義?
我學習C++異常,我想澄清的情景:LHS狀態拋出
T function() throw(std::exception);
...
T t = value;
try { t = function(); }
catch (...) {}
如果拋出異常,什麼是變量t的狀態? 不變或未定義?
保持不變。 t
不能被分配,直到function()
返回一個值,而function()
從不正常返回
t
未設置,因爲在賦值之前拋出異常。該函數將不得不返回要設置的值t
。
它並不是那麼簡單。您的catch子句還會捕獲賦值運算符爲t對象類引發的異常。 t對象可能被部分分配。永遠不要抓住全部例外情況,並假定最可能發生的事情。
在我的特殊情況下不是拋棄。 但我明白你在說什麼。 謝謝 – Anycorn 2010-04-18 01:32:58
這是不正確的。 – 2010-04-18 01:18:29
在一般情況下,你是對的,但在他特定的代碼示例中沒有被覆蓋的賦值操作符,並且默認值不會拋出異常。我認爲他真正想知道的是,如果出現異常,會得到任務的右側 – 2010-04-18 01:34:40
我在這裏是一個無法忍受的屁股,但這些都是OP所依靠的假設,他們是錯誤的。他的編譯器甚至可以在catch-all子句中捕獲硬件異常。這一切都是可以解決的,但代碼將不得不重寫。 – 2010-04-18 02:07:10