在C++中,是否存在将结束父函数的嵌套函数的返回

In C++, is there to return out of a nested function that will end the parent function?

本文关键字:函数 嵌套 返回 结束 C++ 是否 存在      更新时间:2023-10-16

我希望发生这样的事情:

void a(){
    b()
    // if condition met in b(), exit out of this function also
}
void b(){
    if(condition){
        super return
        // also returns out of function a
    }
}

我似乎想不出办法来做这件事。如有任何帮助,我们将不胜感激。谢谢

b必须是void吗?你可以通过以下方式正常操作:

void a()
{
    // if condition met in b(), exit out of this function also
    if( !b() )
    {
        return;
    }
    //continue...
}
bool b(){
    if(condition)
    {
        return false;
        // also returns out of function a
    }
    return true;
}

在C++中没有办法完全按照您的要求执行。有4种机制可供您实现类似的目标。

  1. 返回一个逻辑值:从b返回一个值,在a中测试并立即退出
  2. 设置全局变量:在b中设置一个全局可访问的标志,在a中进行测试并立即退出
  3. 异常:在a的调用者中创建一个try/catch块,在b中抛出一个异常,然后在a外部捕获它
  4. Setjmp/longmp:在a的调用者中创建一个Setjmp,在b中调用longjmp

这些都是你的选择。你可以编写帮助程序、宏或模板,使它们更容易使用,但这是你必须选择的。


编辑:分别处理全局值和返回值。

请注意,这是一个复杂的主题,有许多陷阱可供粗心者使用,包括在非平凡的析构函数中使用longjmp的未定义行为。Cavat程序员!

您可以通过以下任何一种方式

  1. 从第二个方法返回布尔类型。在第一个方法中,检查返回类型,然后执行操作

类似的东西

void a(){
    if(b())
        return;
}
bool b(){
    if(condition){
        // do something
        return true;
    }
}
  1. 从第二个方法抛出异常。您可以从调用者方法捕获它