我有以下代码,其中一个变量正在使用函数调用的结果进行初始化.这个函数抛出所以我设置了一个try-catch来捕获异常.由于某种原因,即使在catch子句运行后,异常仍会出现在屏幕上.
#include <iostream> #include <stdexcept> int f() { throw std::invalid_argument("threw"); return 50; } struct S { S() try : r(f()) { std::cout << "works"; } catch(const std::invalid_argument&) { std::cout << "fails"; } int r; }; int main() { S s; }
06001
为什么异常仍然被抛出?我在main中设置了相同的代码,它可以正常工作:
int main() { try { throw std::invalid_argument("blah"); } catch(const std::invalid_argument&) { } }
那么为什么它在初始化列表中使用时会失败呢?