C++ 设置终止和意外处理程序

C++ 设置终止和意外处理程序,c++,exception-handling,C++,Exception Handling,你能解释一下吗: terminate_handler set_terminate(terminate_handler f)throw() 这是: 意外的\u处理程序集\u意外(意外的\u处理程序f)throw() 要更改终止处理程序,我们必须使用上面显示的set_terminate(),但我无法理解/解释上面的表单。谁能解释一下吗 我也很难理解这一点: terminate_handler set_terminate(terminate_handler f)throw() 这里,, f是指向新终止

你能解释一下吗:

terminate_handler set_terminate(terminate_handler f)throw()

这是:

意外的\u处理程序集\u意外(意外的\u处理程序f)throw()

要更改终止处理程序,我们必须使用上面显示的
set_terminate()
,但我无法理解/解释上面的表单。谁能解释一下吗

我也很难理解这一点:

terminate_handler set_terminate(terminate_handler f)throw()

这里,, f是指向新终止处理程序的指针 返回指向旧终止处理程序的指针。新协议终止 处理程序必须是terminate\u handler类型,其定义如下:

typedef void(*终止处理程序)()


terminate\u handler
是函数指针的类型定义。设置终止处理程序时,传递一个指向要在终止时调用的函数的指针。这是
set\u terminate
的参数。函数返回旧指针。这样,如果您只想在短时间内使用自己的终止处理程序,则可以在完成后恢复上一个处理程序:

void my_terminator() {
    // whatever
}

int main() {
    // terminate here calls default handler

    terminate_handler old_handler = set_terminate(my_terminator);
    // now, terminate will call `my_terminator`

    set_terminate(old_handler);
    // now, terminate will call the default handler

    return 0;
}

terminate\u handler
是函数指针的类型定义。设置终止处理程序时,传递一个指向要在终止时调用的函数的指针。这是
set\u terminate
的参数。函数返回旧指针。这样,如果您只想在短时间内使用自己的终止处理程序,则可以在完成后恢复上一个处理程序:

void my_terminator() {
    // whatever
}

int main() {
    // terminate here calls default handler

    terminate_handler old_handler = set_terminate(my_terminator);
    // now, terminate will call `my_terminator`

    set_terminate(old_handler);
    // now, terminate will call the default handler

    return 0;
}

解释得很好,谢谢!我有一个困惑q1:为什么有'throw()'关键字,是动态异常规范吗?
throw()
,因为括号是空的,所以说函数不抛出任何异常。如今,它将被写成
noexcept
@Pete Becker最后一个问题是
terminate\u handler set\u terminate(terminate\u handler f)throw()原型,用于
设置\u终止
function@rimiro-是的,这是一个功能原型。就像
intmy_函数(inti)throw()。只需将
int
替换为
terminate\u处理程序
。同样,
terminate\u handler
是函数指针的typedef名称。也就是说,它是一个类型的名称,很像
int
。解释得很好,谢谢!我有一个困惑q1:为什么有'throw()'关键字,是动态异常规范吗?
throw()
,因为括号是空的,所以说函数不抛出任何异常。如今,它将被写成
noexcept
@Pete Becker最后一个问题是
terminate\u handler set\u terminate(terminate\u handler f)throw()原型,用于
设置\u终止
function@rimiro-是的,这是一个功能原型。就像
intmy_函数(inti)throw()。只需将
int
替换为
terminate\u处理程序
。同样,
terminate\u handler
是函数指针的typedef名称。也就是说,它是一个类型的名称,很像
int