我需要澄清try块如何与递归一起工作。

说我有一个名为thisFunction的函数,其结构如下:

thisfunction()
{
    if (...)
    {
        //...
    }
    else
    {

            if()
            {
                try {
                    thisFunction()
                }
                catch(...) {
                    throw exception()
                }

                //...
            }
        }
    }
}

在运行时,如果程序进入try,会发生什么?

如果thisFunction()碰巧重新运行并再次落入catch块中,它会在转到try之前运行一次吗?

甚至会去catch(...)吗?

最佳答案

递归仍然是一个函数调用,就像碰巧是一个调用自身的函数一样。

调用下一个迭代时,每次对thisFunction()的调用都有其自己的try/catch块。如果thisFunction()的任何迭代均引发异常,则该异常将按预期被最匹配的catch块捕获。

如果那恰好是上一个catch迭代的thisFunction(),则该迭代的catch将抛出一个新异常,该异常将像其他任何异常一样进行处理。对于thisFunction的多次迭代,将继续捕获并引发异常,直到最终异常摆脱了初始thisFunction()调用为止,并且是否捕获还是取决于第一次启动thisFunction()的代码来启动递归。

10-04 15:08