为什么VS 2013没有给出unhandled exception
例外,或者在执行以下代码时引发了任何中止信号?
#include <thread>
void f1()
{
throw(1);
}
int main(int argc, char* argv[])
{
std::thread(f1);
}
C ++标准声明应在以下情况下调用std :: terminate:
when the exception handling mechanism cannot find a handler for a thrown exception
(15.5.1)
in such cases, std::terminate() is called
(15.5.2)
答案 0 :(得分:3)
问题是在这段代码中,main()可以在生成的线程(f1)之前结束。
请改为尝试:
#include <thread>
void f1()
{
throw(1);
}
int main(int argc, char* argv[])
{
std::thread t(f1);
t.join(); // wait for the thread to terminate
}
此调用在Coliru(gcc)上终止()。
不幸的是,当遇到这个时,Visual Studio 2013将直接调用abort()而不是terminate()(至少在我的测试中),所以即使添加一个处理程序(使用std :: set_handler())显然也无法工作。 I reported this to the VS team
但是,此代码会触发错误,而您的初始代码却无法保证。