我有一个功能,可以减少到这个:
void f() {
static MyObject o("hello");
DoSomethingWith(o);
}
Run Code Online (Sandbox Code Playgroud)
这个函数是在一个C API边界上调用的,所以就像一个好孩子一样,我用它try来捕获任何在越过边界之前抛出的异常并搞砸了:
void f() {
try {
static MyObject o("hello");
DoSomethingWith(o);
} catch (const MyObjectException& e) {
Message("Constructor of o failed");
}
}
Run Code Online (Sandbox Code Playgroud)
第一次调用此函数,我收到消息"Constructor of o failed".但是,稍后,再次调用该函数,我再次收到该消息.我收到的消息多次f被称为.我正在使用Visual C++,所以这告诉我MSVC++的功能,但不是应该做什么.
我的问题是,当的构造会发生什么static功能的可调异常终止(由throw荷兰国际集团,一longjmp出构造的,终止线程,它是在等)?static在它之前和之后声明的任何其他变量应该发生什么?我也很感谢标准中的任何相关引用.