2010-04-18 46 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

相关问题