【发布时间】:2011-12-12 21:30:57
【问题描述】:
对于通过引用捕获的异常以及修改它的尝试会发生什么,该标准是否有任何规定?
考虑以下代码:
class my_exception: public std::logic_error
{
public:
std::vector<std::string> callstack;
};
void MyFunc()
{
try
{
SomethingThatThrows();
}
catch (my_exception & e)
{
e.callstack.push_back("MyFunc");
throw;
}
}
这是一个人为的例子,我实际上并没有尝试这样的事情。我只是好奇会发生什么,基于另一个线程中的建议,即 const 引用应该捕获异常。
【问题讨论】:
-
boost::exception 为此提供了一些简洁的工具。
-
push_back 可以抛出。字符串的复制构造函数可以抛出。今天我更喜欢 std::array
what_msg 里面的异常。这样您就可以轻松实现虚拟化。
标签: c++ exception exception-handling