【发布时间】:2015-06-02 23:26:47
【问题描述】:
如果我有一个异常存储在std::exception_ptr 中。我使用std::rethrow_exception 重新抛出异常,使用catch(MyException&) 访问它,然后修改值。
如果我再次抛出相同的异常,我应该观察我所做的修改吗?
以下代码演示了我的想法:
#include <exception>
#include <iostream>
struct MyException {
int value;
};
int main() {
std::exception_ptr a = std::make_exception_ptr(MyException());
try {
std::rethrow_exception(a);
} catch(MyException& b) {
std::cout << b.value << std::endl;
b.value = 3;
}
try {
std::rethrow_exception(a);
} catch(MyException& b) {
std::cout << b.value << std::endl;
}
}
【问题讨论】:
-
观察修改是什么意思?
-
@perencia 如果我重新抛出相同的异常,它会有我所做的修改。在我的代码示例中,我第二次抛出
a我在value中有 3 个。 -
在示例中,您始终使用同一个对象,通过引用来捕获它。
-
他根本没有证明这一点。
-
证明是一个强有力的词。仅仅因为它适用于我的编译器和我的平台并不意味着它根据 C++ 标准是正确的。
标签: c++ exception c++11 exception-handling