作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我认为这听起来是一个普遍的简单问题,但我在阅读 C++ 异常规范时提出了这个问题。在其中一本书中说,C++11 现在有一个关键字“noexcept”,这意味着当函数用函数头声明时不会抛出异常,并且说这个关键字存在的原因是 C++ 异常规范是在运行时而不是编译时检查的,因此它们不向程序员提供所有异常都已处理的保证。
因此它们得出两种情况:一个函数会抛出异常,或者我们是否清楚它永远不会抛出,然后使用 noexcept
进行优化(希望如此)
void foo() noexcept();
这是主要问题。哪个系统软件执行那些运行时检查(我希望不是编译器/链接器/加载器)以及哪个系统软件负责在运行时分配内存(动态内存分配),而这些都没有被编译器和其他人处理?
最佳答案
正如您所说,没有事件的“系统软件”检查异常;相反,抛出异常是程序本身采取的行动。程序将异常传递回堆栈,直到异常与异常处理程序匹配。
如果没有匹配的异常处理程序,则异常会被 Bootstrap 代码捕获(main 不是典型程序的实际入口点,而是运行时将控制权交给程序员的地方)并且程序终止。
关于c++ - 哪个系统软件负责运行时检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35209091/
我是一名优秀的程序员,十分优秀!