【发布时间】:2013-07-24 05:07:21
【问题描述】:
我正在阅读“C++ 编程语言第 4 版”一书,并且对有关异常处理的段落有疑问:
在某些情况下,必须在短时间内放弃异常处理 微妙的错误处理技术。指导原则是:
- 在处理异常时不要抛出异常。
- 不要抛出无法捕获的异常。
如果异常处理实现发现你正在做任何一个,它 将终止您的程序。
谁能给我一个第一种情况的例子?我想到的只有这样的东西,但它是根据 g++ 的有效代码:
try
{
throw 1;
}
catch(...)
{
try
{
throw 2;
}
catch(...)
{
cout << "OK";
}
}
【问题讨论】:
-
不要仅仅因为它编译就假设某些东西是有效的和/或做你认为的事情!
C++有undefined behaviour 的概念,大致翻译为“如果你做了一些无效的事情,所有的赌注都关闭了”。它可能会崩溃,它可能会工作,它可能看起来有效,但会将您所有的信用卡号码发送给尼日利亚王子。请注意,我并不是说这种特殊情况是(我认为它不是 UB,只是危险地接近),但不要认为“它已编译,没问题”。 -
我不能同意其中的第一个,但可以完全同意第二个。有很多次catch-blocks可以抛出异常,包括相同的异常(通过
throw;)。 -
正文继续:请注意,一旦进入 catch 子句,就会立即处理异常。
标签: c++ exception-handling try-catch