如果我在std::exception_ptr
內存儲了異常。我使用std::rethrow_exception
重新拋出異常,使用catch(MyException&)
訪問它,然後修改該值。我可以修改std :: exception_ptr中的異常值嗎?
如果我再次拋出同樣的異常,我應該觀察我所做的修改嗎?
下面的代碼演示了我的想法:
#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
@perencia如果我重新拋出同樣的異常,它會進行修改。在我的代碼示例中,我第二次拋出'a',在'value'中有3個。 –
在這個例子中,你總是使用同一個對象,通過引用來捕獲它。 – perencia