c++ - 哪个系统软件负责运行时检查

标签 c++ c++11 compilation runtime

我认为这听起来是一个普遍的简单问题,但我在阅读 C++ 异常规范时提出了这个问题。在其中一本书中说,C++11 现在有一个关键字“noexcept”,这意味着当函数用函数头声明时不会抛出异常,并且说这个关键字存在的原因是 C++ 异常规范是在运行时而不是编译时检查的,因此它们不向程序员提供所有异常都已处理的保证。 因此它们得出两种情况:一个函数会抛出异常,或者我们是否清楚它永远不会抛出,然后使用 noexcept 进行优化(希望如此)

void foo() noexcept();

这是主要问题。哪个系统软件执行那些运行时检查(我希望不是编译器/链接器/加载器)以及哪个系统软件负责在运行时分配内存(动态内存分配),而这些都没有被编译器和其他人处理?

最佳答案

正如您所说,没有事件的“系统软件”检查异常;相反,抛出异常是程序本身采取的行动。程序将异常传递回堆栈,直到异常与异常处理程序匹配。

如果没有匹配的异常处理程序,则异常会被 Bootstrap 代码捕获(main 不是典型程序的实际入口点,而是运行时将控制权交给程序员的地方)并且程序终止。

关于c++ - 哪个系统软件负责运行时检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35209091/

相关文章:

c++ - 创建一个变量来保存不同类型的对象 C++

c++ - 是否有支持 g++ 或 clang 内存驻留编译的实用程序?

ubuntu - 找不到包裹

Haskell 插件在重新编译文件时给出旧值

c++ - 如何在没有 free() 或 delete 的情况下返回 char*?

c++ - 具有不同数量参数的函数的模板别名

c++ - 启用 c++11 时 c++ 递归模板的奇怪行为

c++ - 用 C++ 解析 <li> 列表

c++ - const 关键字在运算符定义中的作用是什么?

c++ - 值传递会影响递归算法的渐近时间复杂度吗?