关于C++中的throw()

sky*_*oor 2 c++

void MyFunction(int i)throw();

它只是告诉编译器该函数不会抛出任何异常.

它不能确保函数什么都不扔,是吗?

那么throw()的用途是什么

这是多余的吗?为什么提出这个想法?

Jer*_*fin 5

首先,当编译器正常工作时,它会强制执行 - 但是在运行时,不是编译时..具有空异常规范的函数不会抛出异常.如果发生了会导致异常unexpected()转移的事情,则会调用(反过来)调用abort.您可以使用set_unexpected来更改被调用的内容,但是允许执行的所有功能是在中止程序之前添加额外的"东西"(例如清理) - 它不能返回到原始执行路径.

也就是说,至少有一个主要编译器(VC++)解析异常规范,但不强制执行它们,尽管它可以使用空异常规范来稍微改进优化.在这种情况下,未遵循的异常规范可能/确实会导致未定义的行为,而不是必然中止程序.