C++ 错误处理程序如何在内部工作?
我知道互联网上有很多关于这个话题的文档。 但是在没有正确答案的情况下进行数小时的研究是相当令人沮丧的。所以我想我不能用一个好的短语来表达我的问题。以下是完整版本: 我正在做一个关于试捕的演示,但是做基本的事情很无聊。我知道什么是try-catch,我知道它是如何工作的。 但是魔术来了:假设我们使用C++。 编译器将在堆上创建一个只读列表,其中的结构提供有关try块中函数的信息。这包括例程开始和结束的指针、有关异常对象类型的信息等等。(如果我错了,请纠正我) 好的。现在出现了一个异常。所谓的错误处理程序(在这里,谁是错误处理程序?)。通过将错误生成的异常对象与捕获中的异常对象进行比较,可以找到正确的捕获 例如:创建InvalidCastException(或类似的东西)。有一个陷阱,错误被处理,在try块中创建的所有对象都被销毁C++ 错误处理程序如何在内部工作?,c++,error-handling,try-catch,C++,Error Handling,Try Catch,我知道互联网上有很多关于这个话题的文档。 但是在没有正确答案的情况下进行数小时的研究是相当令人沮丧的。所以我想我不能用一个好的短语来表达我的问题。以下是完整版本: 我正在做一个关于试捕的演示,但是做基本的事情很无聊。我知道什么是try-catch,我知道它是如何工作的。 但是魔术来了:假设我们使用C++。 编译器将在堆上创建一个只读列表,其中的结构提供有关try块中函数的信息。这包括例程开始和结束的指针、有关异常对象类型的信息等等。(如果我错了,请纠正我) 好的。现在出现了一个异常。所谓的错误处
但是:程序如何注意到存在异常?这是由程序、运行时还是处理器(我读到关于RIG0和RIG1的不同,CPU OO中的不同级别)处理的。 < P>在C++中有两种实现异常处理的方式。首先是使用安腾ABI零成本异常处理。第二种方法是使用一对
setjmp/longjmp
来处理异常的控制流。第一个是每个现代编译器的首选实现
程序不会“侦听”异常,因此不会注意到异常。相反,它会将它们作为控制流的一部分进行引发和处理。例如,“throw”总是引发一个异常,该异常触发将执行转移到异常处理代码
尽管这些异常在C++中大量使用,它提供了一个很好的接口来“抛出”和“捕获”它们,它们也在C语言中使用,甚至在Linux内核中使用。p>
您可以在此处阅读更多内容: