【发布时间】:2014-09-10 09:23:58
【问题描述】:
为什么 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)
【问题讨论】:
-
@user657267 不是真的。我不想在线程之间传播异常,我想知道为什么上面的代码正常执行并终止而没有引发异常。
-
你既没有加入也没有脱离那个线程,所以很确定你有未定义的行为。 (而且你的程序可能在线程真正有机会运行之前就退出了。)
-
@Mat 谢谢,我真是个白痴。您为什么不将其作为答案提交,以便我标记为答案?
-
嗯,我不太确定。似乎你仍然应该得到一个
terminate,因为当你退出 main 时,该线程对象应该是活动的,调用线程的析构函数。如果线程是可连接的,那么调用就会终止。 clang 和 GCC 调用都在此处终止 (Linux)。
标签: c++ exception visual-studio-2013