我学习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