gpt4 book ai didi

c++ - 关于 C++ 中的 throw()

转载 作者:搜寻专家 更新时间:2023-10-31 00:05:31 24 4
gpt4 key购买 nike

void MyFunction(int i) throw();

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

它不能确保函数什么都不抛出,对吗?

那么throw()有什么用

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

最佳答案

首先,当编译器正常工作时,它强制执行的——但在运行时,而不是编译时。具有空异常规范的函数不会抛出异常。如果发生会导致从中逃逸的异常,将改为调用 unexpected(),后者(反过来)调用 abort。您可以使用 set_unexpected 来更改被调用的内容,但是该函数被允许做的所有事情都是在中止程序之前添加额外的“东西”(例如清理)——它无法返回到原来的状态执行路径。

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

关于c++ - 关于 C++ 中的 throw(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2157606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com